WikiJuanan : ManualCakePHP

No se puede redirigir por malos parametros de redirección.

Cake PHPCake LogCake ApiManual Cake PHPCake AvanzadoTraduciendo CakeCake News

CakeMenu    


Estamos haciendo la traducción oficial del manual en http://cakeforge.org/projects/translations/

Manual de Cake PHP 

Contenido

Modelos

¿Qué es un modelo?

El modelo es la 'M' del patrón de diseño MVC.
Su función es separar el dominio de la lógica de la presentación, aislando la lógica de la aplicación.

Funciones de los modelos

Guardando los datos

Para guardar los datos en tus modelos, necesitas proporcionar los datos que deseas almacenar. Los datos que se pasan a la función «save()" deben pasarse como un array en el siguiente formato:
$datosParaGuardar = array('NombreDelModelo' => array('campo1' => 'valor', 'campo2' => 'valor'))

La orden «save()" que utilizaremos desde el controlador para guardar los datos en el modelo, y de paso en la base de datos si procede, quedaría así:
$this->Nombre Del Modelo->save($datosParaGuardar, $validar, $listaDeCampos);

En donde $validar puede tomar los valores 'true' o 'false' y $listaDeCampos debe contener la lista de campos que pretendemos salvar en forma de array.
$listaDeCampos = array('campo1','campo2')


Para conseguir que los datos pasados a tu controlador tengan este formato, lo más fácil es usar HTML Helper, ya que éste crea elementos de formulario con los nombres apropiados que necesita Cake.

$html->input('Modelo/nombrecampo');

Si no quieres hacer esto asegurate que los elementos de tu formulario tengan nombres como data[Nombre Modelo][nombrecampo].

Los datos enviados desde el formulario son automáticamente formateados de forma correcta y almacenados en la variable "$this->data" dentro de tu controlador, por tanto salvar los datos desde un formulario web es algo instantaneo.

Herencia en Cake

Para derivar una clase de otra en Cake, parece que no basta con la directiva “extends” al definir la clase, hay que añadir la línea «loadModule('ClasePadre');" antes de definir la clase, ahí va un ejemplo:
loadModel('Analysis');
class Analysis Ctt extends Analysis {
...

Otra forma de hacer esto sería: require_once dirname(FILE). DS . 'analysis.php';


Controladores

Propiedades del controlador

$autoRender

Esta variable es la responsable de que las acciones de un controlador llamen o renderizen una vista después de terminar su ejecución. Por defecto es 'true', podríamos establecerla como 'false' para crear controladores ($var autoRender=false;) o acciones ($this->autoRender = false;) que no llamen a ninguna vista.

$name

Normalmente un controlador toma por defecto el modelo que corresponde a su nombre en singular. Si el controlador utiliza un modelo con nombre distinto o el nombre tiene un plural irregular utilizamos esta propiedad para establecerlo. Este recurso también resuelve problemas de nombres de modelos con Palabras Camello en sistemas con PHP4.

La forma de uso es:
var $name = 'NombreDelModelo';

$uses

Si el controlador necesita más de un modelo utilizamos esta variable para indicarlo. Hay que incluir también el modelo que responde al nombre del controlador.

La forma de uso es
var $uses = array('Modelo1','Modelo2','Modelo3');

Funciones de controlador

Aunque en esta sección se describen las funciones más utilizadas en los Controladores de Cake, es conveniente consultar la api en http://api.cakephp.org// para una referencia completa

Interacción con las vistas

set($cadena_variable,$cadena_valor)

Sirve para pasar datos desde un controlador hacia una vista, en forma de variables, arrays, etc.

Por ejemplo:
$this->set('color','blue');

Ahora desde la vista podemos utilizar la variable $color que nos devolverá 'blue'.

render ($cadena_accion, $cadena_layout, $cadena_fichero)

Puede que no use esta función muy a menudo, puesto que la llamada a 'render' se produce automáticamente al final de la ejecución de cada acción de un controlador, renderizando la vista asociada al nombre de la acción. No obstante, puedes llamar a esta función para que renderize la vista en cualquier punto de la ejecución del controlador ( $this->render(); ).

Redireccionado (?)

flash($cadena_mensaje,$cadena_url, $entero_pausa)

Esta función muestra un $mensaje al usuario usando el layout flash (está en 'app/views/layouts/flash.thtml') durante el tiempo especificado en $pausa y luego envía al usuario a la página especificada en $url.

En el layout por defecto el usuario también puede pasar a la $url de destino pulsando en el hipervínculo asociado al propio mensaje.

Ejemplo:
$this->flash('La página se ha grabado correctamente', 'paginas/list', 10);

Otras funciones útiles

Aunque estas funciones son parte de la clase 'Object' de Cake están también disponibles desde el Controlador.

requestAction ($cadena_url, $array_extra)

Esta función llama a una acción de otro controlador, retornando datos o una vista renderizada. La $url es una URL tipo Cake (/nombrecontrolador/accion/parametros). Si el array $extra incluye una clave 'return', Auto Render es establecido automáticamente a 'true' para la acción, o sea la vista será renderizada.

Conseguir datos desde un controlador es simple. Sólo tienes que usar requestAction en el controlador donde necesitas los datos.

<code>
// Este es nuestro sencillo controlador
class Usuarios Controller extends App Controller
{
function obtenerListaUsuarios()
{
return $this->Usuario->findAll();
}
}
</code>

Imagina que necesitamos crear una tabla mostrando los usuarios del sistema. En vez de duplicar código en otro controllador, podemos obtener los datos desde Usuarios Controller::obtenerListaUsuarios() usando un requestAction().

<code>
class Productos Controller extends App Controller
{
function muestraUsuarioProductos()
{
$this->set('usuarios', $this->requestAction('/usuarios/obtenerListaUsuarios'));
// Ahora la variable $usuarios en la vista tiene los datos
// de Usuarios Controller::obtenerListaUsuarios()
}
}
</code>

Si tienes un elemento no estático en tu aplicación que usas mu a menudo, podrías querer usar requestAction() para inyectarlo en tus vistas. Digamos que mejor que pasar sólo los datos desde Usuarios Controller::obtenerListaUsuarios(), queremos realmente renderizar la vista de esa acción (que podría consistir en una tabla), dentro de otro controlador. Esto nos ahorra duplicar código de la vista.

<code>
class Programas Controller extends App Controller
{
function verTodo()
{
$this->set('tablaUsuario', $this->requestAction('/usuarios/obtenerListaUsuarios', array('return')));
// Ahora podemos hacer 'echo $tablaUsuario;' desde la vista de esta acción
// para ver la lista renderizada que esta disponible también desde /usuarios/obtenerListaUsuarios
}
}
</code>

Observa que las acciones llamadas desde requestAction() son renderizadas usando un diseño o layout vacío. De esta manera no tienes que preocuparte de diseños renderizándose dentro de otros diseños.

La función requestAction() es también de gran utilidad cuando usamos AJAX, donde un pequeño elemento de una vista necesita ser rellenado antes o durante un actualización AJAX.

Clases

Inflector

Se encarga de realizar conversiones entre nombre de modelos, vistas, controladores y ficheros. Transformando de plural a singular, de camel case a subrayado bajo, etc. Algunas de sus funciones son: pluralize, singularize, camelize, humanize o classify.

Ejemplo de uso: $plural = Inflector::pluralize($singular);
Más información: http://api.cakephp.org/class_inflector.html

HtmlHelper

HTMLHelper está incluido por defecto en cualquier controlador, pero si quermos usar otros helper tendremos que incluir también a 'Html' en el array que los carga.

var $helpers = array('Html','Ajax','Javascript');

Como todas las clases 'Helper' sus funciones se utilizan desde dentro de una vista, no desde el controlador, aunque se las referencie desde éste.

link

url($cadena_url, $boolean_return)

Busca la URL para una accioón especificada.

Devuelve una URL apuntando a una combinación de controlador y acción. Si $url está vacío devuelve la dirección del controlador y la acción actual.

La variable $return determina si la función debe devolver un valor o mostrarlo. Esto pasa por encima el valor de AUTO_OUTPUT.

Ejemplos:
$html->url('/productos/edit/92');
$html->url('/'); // Devuelve la url raiz de la aplicación.

Nota: no se debe confundir esta función con Html::link() que devuelve una etiqueta html completa para mostrar un hiperenlace.

SessionComponent


Es el encargado de lidiar con las variables de sesión.

startup (&$controller)
write ($name, $value)
read ($name=null)
del ($name)
delete ($name)
check ($name)
error ()
setFlash ($flashMessage, $layout= 'default', $params=array(), $key= 'flash')
flash ($key= 'flash')
renew ()
valid ()

Ficheros de configuración

bootstrap.php

Este fichero se carga automaticamente desde app/webroot/index.php después del bootstrap.php común a todos los proyectos de cake.

Este fichero es visible para toda la aplicación y se usa para:


$modelPaths = array('ruta completa modelos', 'segunda ruta completa modelos', 'etc...');
$viewPaths = array('ruta completa vistas', 'segunda ruta completa vistas', 'etc...');
$controllerPaths = array('ruta completa controladores', 'segunda ruta completa controladores', 'etc...');

Enlaces de interés

Web oficiales



Blogs



Más Webs



Articulos