cakephp 2.0 - plantillas - En View(CakePHP), ¿la forma correcta de obtener el controlador actual?
plantillas para cakephp (7)
Estoy usando cakephp 3.2
$this->params[''controller''] - It is not working, showing error message as bellow..
"Missing Helper"
El siguiente código funciona correctamente en cakephp 3.2
$this->request->params[''controller''] - Working
En View, puedo obtener acción mediante el uso de
$this->action
Pero, no puedo obtener el nombre del controlador por
$this->controller
¿Cuál es la forma correcta de obtener el controlador actual en la Vista?
Para obtener el controlador actual, intente esto: $this->params[''controller'']
Para obtener la acción actual, intente esto: $this->params[''action'']
.
Para obtener la corriente,
- controlador:
$this->params[''controller'']
- acción:
$this->params[''action'']
- argumentos:
$this->params[''pass'']
Puedes obtener un controlador como este:
echo "<pre>controller:".$this->request->params[''controller'']."</pre>";
Aunque $this->params
es más corto, $this->request->params
es más fácil de autocompletar. Puede verificar las opciones de autocompletar de esta pregunta: PHPStorm autocompletar para los ayudantes personalizados de CakePHP en los archivos de visualización
Se pueden tomar otros datos sobre la solicitud de esta manera:
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>";
Editar:
A partir de CakePHP 3, se borra el atajo $this->params
. Entonces deberías usar $this->request->params[''controller'']
para CakePHP 3.
http://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html#id2
También tenga en cuenta que el primer carácter del controlador es en mayúsculas. Fue minúscula en Cakephp 2.
Todas las otras soluciones son para obtener el nombre del controlador ... Necesito el controlador en sí, así que hice la siguiente función en un AdminHelper.php llamado por $this->Admin->_getController(''MyControllerName'')
en la view.ctp archivo
/******************************************************************
*
******************************************************************/
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;
}
Nota: no olvide declararlo en el controlador que usará, por ejemplo:
- people / view.ctp ->
$this->Admin->_getController(''MyControllerName'')
- PeopleController.ctp ->
var $helpers = array(''Html'', ''Form'', ''Admin'');
- AdminHelper.ctp ->
function _getController(...
Use $this->params[''controller'']
para obtener el controlador actual.
Puede hacer una debug($this->params)
para ver otras variables disponibles.
$this->name
también le da el nombre del controlador. Su diferencia con $this->params[''controller'']
es su primera letra en mayúscula
debug($this->name);
debug($this->params[''controller'']);
Resultados en:
/app/Controller/AppController.php (line 176)
''Users''
/app/Controller/AppController.php (line 177)
''users''