web-dev-qa-db-fra.com

Dans View (CakePHP), la bonne façon d'obtenir le contrôleur de courant?

Dans View, je peux passer à l'action en utilisant

$this->action

Mais, je ne peux pas obtenir le nom du contrôleur par

$this->controller

Quelle est la bonne façon d'obtenir le contrôleur actuel dans View?

35
Hao

Utilisez $this->params['controller'] Pour obtenir le contrôleur actuel.

Vous pouvez faire une debug($this->params) pour voir les autres variables disponibles.

79
Wa0x6e

Vous pouvez obtenir un contrôleur comme celui-ci:

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

Bien que $this->params est plus court, $this->request->params est plus convivial pour la saisie semi-automatique. Vous pouvez vérifier les options de saisie semi-automatique à partir de cette question: PHPStorm saisie semi-automatique pour les assistants personnalisés CakePHP dans les fichiers de vue

D'autres données sur la demande peuvent être prises comme ceci:

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>";

Modifier:
Depuis CakePHP 3 $this->params le raccourci est supprimé. Vous devez donc utiliser $this->request->params['controller'] pour CakePHP 3.
http://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html#id2
Notez également que le premier caractère du contrôleur est en majuscule. Il était en minuscule dans Cakephp 2.

12
trante

$this->name vous donne également le nom du contrôleur. Leur différence avec $this->params['controller'] est sa première lettre en majuscule

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

Résulte en:

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

'Users'

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

'users'
9
bangbex

Pour obtenir le contrôleur actuel, essayez ceci: $this->params['controller']

Pour obtenir l'action en cours, essayez ceci: $this->params['action'].

4
Rohit Dubey

J'utilise cakephp 3.2

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

"Aide manquante"

Le code suivant fonctionne correctement dans cakephp 3.2

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

Pour cakephp 3.6 et versions ultérieures:

Bien que les solutions ci-dessus fonctionnent, elles donnent un avertissement obsolète et ne fonctionneront pas dans cakephp 4. Il est donc préférable d'utiliser le code suivant pour obtenir le nom du contrôleur. Il fonctionnera également dans la page d'affichage et les contrôleurs.

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

Pour obtenir le courant,

  • manette: $this->params['controller']
  • action: $this->params['action']
  • arguments:$this->params['pass']
2
nitin

Toutes les autres solutions consistent à obtenir le nom du contrôleur ... J'ai besoin du contrôleur lui-même, j'ai donc fait la fonction suivante dans un AdminHelper.php appelé par $this->Admin->_getController('MyControllerName') dans le fichier 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;
}

Note: n'oubliez pas de le déclarer dans le contrôleur que vous utiliserez par exemple:

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