web-dev-qa-db-ja.com

View(CakePHP)で、現在のコントローラーを取得する適切な方法は?

ビューでは、次を使用してアクションを取得できます

$this->action

しかし、私はコントローラ名を取得できません

$this->controller

Viewで現在のコントローラーを取得する適切な方法は何ですか?

35
Hao

_$this->params['controller']_を使用して、現在のコントローラーを取得します。

debug($this->params)を実行して、他の使用可能な変数を表示できます。

79
Wa0x6e

次のようなコントローラーを取得できます。

echo "<pre>controller:".$this->request->params['controller']."</pre>";

$this->paramsは短いですが、$this->request->paramsはオートコンプリートに適しています。この質問からオートコンプリートオプションを確認できます。 ビューファイル内のCakePHPカスタムヘルパーのPHPStormオートコンプリート

リクエストに関するその他のデータは、次のように取得できます。

echo "<pre>action:".$this->request->params['action']."</pre>";

echo "<pre>request:"; print_r( $this->request ); echo "</pre>";

echo "<details><summary>this:</summary><pre>"; 
      print_r( $this ); echo "</pre></details>";

編集:
CakePHP 3 $this->paramsショートカットは削除されました。そのため、CakePHP 3では$this->request->params['controller']を使用する必要があります。
http://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html#id2
コントローラの最初の文字が大文字であることにも注意してください。 Cakephp 2では小文字でした。

12
trante

$this->nameもコントローラーの名前を示します。 $this->params['controller']との違いは、最初の文字が大文字であることです

debug($this->name);
debug($this->params['controller']);

結果:

 \app\Controller\AppController.php (line 176)

'Users'

\app\Controller\AppController.php (line 177)

'users'
9
bangbex

現在のコントローラーを取得するには、これを試してください:$this->params['controller']

現在のアクションを取得するには、これを試してください:$this->params['action']

4
Rohit Dubey

私はcakephp 3.2を使用しています

$this->params['controller'] - It is not working, showing error message as bellow..

「ヘルパーの欠落」

次のコードはcakephp 3.2で正常に動作しています

$this->request->params['controller'] - Working
4
Dinesh Vaitage

Cakephp 3.6以降の場合:

上記のソリューションは機能しますが、非推奨の警告が表示され、cakephp 4では機能しません。そのため、次のコードを使用してコントローラー名を取得することをお勧めします。ビューページとコントローラーでも機能します。

$this->request->getParam('controller')
2
Amit Garg

電流を取得するには、

  • コントローラー:$this->params['controller']
  • アクション:$this->params['action']
  • 引数:$this->params['pass']
2
nitin

他のすべての解決策はコントローラー名を取得することです...コントローラー自体が必要なので、$this->Admin->_getController('MyControllerName')によって呼び出されるAdminHelper.phpでview.ctpファイルに次の関数を実行しました

_/******************************************************************
 * 
 ******************************************************************/
function _getController( $pControllerName ){
    if ( ! isset($this->controllersArray[$pControllerName]) ){
        $importRes = App::import('Controller', $pControllerName);// The same as require('controllers/users_controller.php');
        $strToEval = "\$controller = new ".$pControllerName."Controller;";
        $evalRes = eval($strToEval);
        if ( $evalRes === false ){
            throw new AppException("Eval returned an error into ".__FILE__." getController()");
        }
        $controller->constructClasses();// If we want the model associations, components, etc to be loaded
        $this->controllersArray[$pControllerName] = $controller;
    }

    $result = $this->controllersArray[$pControllerName];
    return $result;
}
_

注:使用するコントローラーに宣言することを忘れないでください:

  • people/view.ctp-> $this->Admin->_getController('MyControllerName')
  • PeopleController.ctp-> var $helpers = array('Html', 'Form', 'Admin');
  • AdminHelper.ctp-> _function _getController(..._
0
Pipo