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?
Utilisez $this->params['controller']
Pour obtenir le contrôleur actuel.
Vous pouvez faire une debug($this->params)
pour voir les autres variables disponibles.
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.
$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'
Pour obtenir le contrôleur actuel, essayez ceci: $this->params['controller']
Pour obtenir l'action en cours, essayez ceci: $this->params['action']
.
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
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')
Pour obtenir le courant,
$this->params['controller']
$this->params['action']
$this->params['pass']
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:
$this->Admin->_getController('MyControllerName')
var $helpers = array('Html', 'Form', 'Admin');
function _getController(...