web-dev-qa-db-ja.com

CakePHPはアクション名を取得します

CakePHPでは、を使用して呼び出された関数文字列を取得することができます

$this->action

構文。呼び出されたもののリテラル文字列を返すため、URLが/do_thisの場合は、do_thisを返し、doThisの場合は、doThisを返します。呼び出されたメソッドの本名に関係なく。

一方、私が探しているのは、URL構文に関係なく、呼び出されたメソッドの実際の名前です。

それを見つける方法はありますか?

beforeFilterメソッドでこれを実行できることが望ましいです。

11
arik

リクエストオブジェクトを使用する必要があります。

CakePHP3.3以下

_$this->request->params['action'];
_

3.4以降

_$this->request->getParam('action');
_

これには、呼び出された実際のメソッド名が含まれている必要があると思います。 CakePHPsルーターは、文字列URLをコントローラー/アクションペアおよびその他の引数に解決します。これらはすべてリクエストオブジェクトになります。ドキュメントを読み、beforeFilter()でdebug($this->request);を実行して、他に何があるかを確認します。

22
burzum

CakePHP2では$ this-> actionを使用でき、CakePHP3では$ this-> request-> params ['action']を使用する必要があります

params配列(CakePHP> = 3.4)は非推奨ですコントローラー内で現在のアクションを取得する正しい方法は次のとおりです。

$currentAction = $this->request->getParam('action');
3
thanassis

これを見たことがありますか? phpで現在の関数の名前を取得する これは明らかにbeforeFilterでは機能しません。コントローラでprivate $ action_nameという変数を設定し、メソッド内から設定して、後でafterFilterで使用できます。

0
visualex