3.5.2 Atributos del Controlador

Para ver la lista completa de atributos visite la API de CakePHP en la sección http://api.cakephp.org/1.2/class_controller.html.

3.5.2.1 $name

Los usuarios de PHP4 deberían emprezar la definicion de sus controladores con el atributo $name. Este atributo debería ser asignado con el nombre del controlador. Usualmente este es simplemente el plural del modelo principal al que el controlador está asociado. Esto previene algunos problemas de distinción de mayúsculas que tiene PHP4 para los nombres de las clases.

<?php

#   $name Ejemplo de uso del atributo $name

class RecetasController extends AppController {
   var $name = 'Recetas';
}

?>	
  1. <?php
  2. # $name Ejemplo de uso del atributo $name
  3. class RecetasController extends AppController {
  4. var $name = 'Recetas';
  5. }
  6. ?>

3.5.2.2 $components, $helpers y $uses

Los siguientes atributos más comunmente utilizados del controlador indican a CakePHP qué ayudantes (helpers), componentes (components), y modelos (models) utilizarás en conjunción con el controlador actual. Utilizar esos atributos hace que las clases MVC estén disponibles al controlador como variable de clase($this->ModelName, por ejemplo).

Cada controlador tiene alguna de esas clases disponibles por defecto, así que no necesitarás configurar tu controlador.

Los controladores tienen acceso a su modelo primario disponible por defecto. Nuestro RecipesController tendrá disponible la clase modelo Recipe en $this->Recipe, y nuestro ProductsController también posee el modelo Product en $this->Product.

Los ayudantes (Helpers) Html, Form, y Session están siempre disponibles por defecto, como lo es SessionComponent. Para aprender más sobre estas clases, no olvides leer sus respectivas secciones más adelante en este manual.

Veamos cómo decirle a un controlador de CakePHP que planeas utilizar clases MVC adicionales.

<?php
class RecipesController extends AppController {
    var $name = 'Recipes';

    var $uses = array('Recipe', 'User');
    var $helpers = array('Ajax');
    var $components = array('Email');
}
?>
  1. <?php
  2. class RecipesController extends AppController {
  3. var $name = 'Recipes';
  4. var $uses = array('Recipe', 'User');
  5. var $helpers = array('Ajax');
  6. var $components = array('Email');
  7. }
  8. ?>

Cada una de estas variables es fusionada con sus valores heredados, por lo tanto no es necesario (por ejemplo) declarar le ayudante (helper) Form, o cualquier cosa que es declarada en tu controlador App.

3.5.2.3 Atributos Relacionados con la Página: "$layout" y "$pageTitle"

Existen unos pocos atributos en los controladores de CakePHP que te dan control sobre cómo se colocan tus vistas (views) dentro del diseño (layout).

Al atributo $layout se le puede asignar el nombre de un diseño (layout) guardado en /app/views/layouts. Especificas un diseño al igualar $layout al nombre del archivo con el diseño excluyendo la extensión .ctp. Si este atributo no ha sido definido, CakePHP renderiza el diseño por defecto, default.ctp. Si no has definido un diseño en /app/views/layouts/default.ctp, el diseño por defecto del núcleo de CakePHP’s será renderizado.

<?php

//   Usando <em>$layout</em> para definir un diseño alternativo

class RecipesController extends AppController {
    function quickSave() {
        $this->layout = 'ajax';
    }
}

?>
  1. <?php
  2. // Usando <em>$layout</em> para definir un diseño alternativo
  3. class RecipesController extends AppController {
  4. function quickSave() {
  5. $this->layout = 'ajax';
  6. }
  7. }
  8. ?>

También puedes cambiar el título de la página (que está localizado en la barra en la parte superior de tu navegador) utilizando $pageTitle. Para que esto funcione apropiadamente, tu diseño (layout) necesita incluir la variable $title_for_layout como mínimo entre las etiquetas <title> y </title> en la cabecera del documento HTML.

<?php

//   Usando <em>$pageTitle</em> para definir el título de la página

class RecipesController extends AppController {
    function quickSave() {
        $this->pageTitle = 'Mi título del motor de búsquedas optimizado';
    }
}

?>
  1. <?php
  2. // Usando <em>$pageTitle</em> para definir el título de la página
  3. class RecipesController extends AppController {
  4. function quickSave() {
  5. $this->pageTitle = 'Mi título del motor de búsquedas optimizado';
  6. }
  7. }
  8. ?>

También puedes establecer el título desde la vista (view) usando $this->pageTitle (Has de incluir la parte $this->; se recomienda, ya que separa la lógica del diseño y el contenido). Para una página estática has de usar $this->pageTitle en la vista si quieres un título personalizado.

Si $this->pageTitle no está establecido, se generará automáticamente un título basado en el nombre del controlador, o el nombre del fichero de la vista en el caso de una página estática.

3.5.2.4 El Atributo de Parámetros ("$params")

Los parámetros del controlador están disponibles en $this->params en tu controlador de CakePHP. Esta variables es usada para proporcionar acceso a la información sobre la petición actual. El uso más común de $this->params es obtener acceso a información que ha sido entregada al controlador a través de las operaciones POST o GET.

3.5.2.4.1 form

$this->params['form']

Cualquier dato POST de cualquier formulario se almacena aquí, incluyendo información también hallada en $_FILES.

3.5.2.4.2 admin

$this->params['admin']

Contiene el valor 1 si la acción (action) actual fue invocada mediante enrutamiento "admin".

3.5.2.4.3 bare

$this->params['bare']

Almacena un 1 si el diseño (layout) actual está vacío; 0 si no.

3.5.2.4.4 isAjax

$this->params['ajax']

Almacena un 1 si la petición actual es una llamada ajax; 0 si no. Esta variables sólo se establece si el componente RequestHandler es usado en el controlador.

3.5.2.4.5 controller

$this->params['controller']

Almacena el nombre del controlador actual que está sirviendo la petición. Por ejemplo, si fue pedida la URL /posts/view/1, $this->params['controller'] será igual a "posts".

3.5.2.4.6 action

$this->params['action']

Almacena el nombre de la acción actual sirviendo la petición. Por ejemplo, si fue pedida la URL /posts/view/1, entonces $this->params['action'] será igual a "view".

3.5.2.4.7 pass

$this->params['pass']

Almacena la cadena de consulta GET enviada con la petición actual. Por ejemplo, si fue pedida la URL /posts/view/?var1=3&var2=4, entonces $this->params['pass'] será igual a "?var1=3&var2=4".

3.5.2.4.8 url

$this->params['url']

Almacena la URL actual pedida, junto con los pares clave-valor de variables get. Por ejemplo, si se llamó a la URL /posts/view/?var1=3&var2=4, entonces $this->params['url'] debería contener:

[url] => Array
(
    [url] => posts/view
    [var1] => 3
    [var2] => 4
)

3.5.2.4.9 data

$this->data

Usado para manejar datos POST enviados desde los formularios de FormHelper al controlador.

// El helper FormHelper es usado para crear un elemento de formulario:
$form->text('User.first_name');
  1. // El helper FormHelper es usado para crear un elemento de formulario:
  2. $form->text('User.first_name');

El cual al ser renderizado, se ve parecido a:

<input name="data[User][first_name]" value="" type="text" />

Cuando el formulario es enviado al controlador mediante POST, los datos aparecen en this->data

// El valor first_name enviado se puede encontrar aquí:
$this->data['User']['first_name'];
  1. // El valor first_name enviado se puede encontrar aquí:
  2. $this->data['User']['first_name'];

3.5.2.4.10 prefix

$this->params['prefix']

Establecido al prefijo de enrutado. Por ejemplo, este atributo contendría la cadena "admin" durante una petición a /admin/posts/someaction.

3.5.2.4.11 named

$this->params['named']

Almacena cualquier parámetro con nombre /clave:valor/ de la cadena de petición de la URL. Por ejemplo, si se pidió la URL /posts/view/var1:3/var2:4, entonces $this->params['named'] debería contener el array:

[named] => Array
(
    [var1] => 3
    [var2] => 4
)

3.5.2.5 Otros Atributos

Aunque puedes ojear todos los detalles para todos los atributos del controlador en el API, hay otros atributos del controlador que merecen sus propias secciones en el manual.

El atributo $cacheAction ayuda en el "cacheado" (caching) de vistas (views), y el atributo $paginate es usado para establecer las opciones por defecto de paginado para el controlador. Para más información sobre cómo utilizar esos atributos, écha un vistazo a sus respectivas secciones más adelante en este manual.