CakePHP: requestAction - Userlinux.net

Dados dos controladores distintos -users_controller.php y cars_controller.php- dentro de la misma aplicación, supongamos que queremos cruzar información entre ellos. Por ejemplo dentro del controlador de cars queremos un listado con los datos del user al que pertenece. Para ello creamos una función dentro de users_controller.php que sea la encargada de…

CakePHP: requestAction

26.Dec.2007 ~ 2 Comentarios ~ 1665 Lecturas
Dados dos controladores distintos -users_controller.php y cars_controller.php- dentro de la misma aplicación, supongamos que queremos cruzar información entre ellos. Por ejemplo dentro del controlador de cars queremos un listado con los datos del user al que pertenece.

Para ello creamos una función dentro de users_controller.php que sea la encargada de devolver los datos de un usuario seleccionado según $id:

function datos($id)
{
 // Si no se accede por un requestAction no funciona
 if(empty($this->params['requested'])) { exit; }
 // Devuelve los datos del usuario seleccionado según $id
 return $this->User->find('first',array('conditions' => array('User.id' => $id)));
}
Ahora solo nos queda llamar a esa función desde cars_controller y procesar la información para que quede accesible a nivel de vista, lo haremos con este código:
function listado($id)
{
 ...
 // Llamamos a la función datos() de users
 $datos = $this->requestAction('/users/datos/'.$this->Session->read('sid'));
 // Declaramos la variable que usaremos a nivel de vista
 $this->set('dataUser', $datos);
}
En este caso el parámetro $id lo sacamos de una variable de sesión. El uso básico de requestAction es sencillo y considero que con este ejemplo queda bien explicado.

Referencias

Comentarios


gravatar
26.Dec.2007
Si, se puede hacer de ese modo pero no es el optimo, ya que al hacer el requestAction cake vuelve a hacer todo el proceso de ruteo, manejo de parametros, instanciamiento del controlador, modelo etc. para la nueva petición.

En caso de querer utilizar una lógica perteneciente a un modelo relacionado con un modelo asociado al controlador en que está lo mejor es relacionar dichos modelos con la relación correspondiente y luego, desde cars por ejemplo, hacer algo del tipo:

$this->Car->User->find('first',array('conditions' => array('User.id' => $this->Session->read('sid'))));

Con eso obtienes el mismo resultado y la performance es mucho mejor.

Tambien podrías hacer lo mismo si User y Car no estuvieran relacionados haciendo que CarsController use el modelo User.

Saludos,

gravatar
27.Dec.2007
Genial tu aporte Pablo. En este caso concreto son modelos relacionados entre si, pero me parece más interesante el hecho de poder hacerlo aunque los modelos no estuvieran relacionados.

Comentarios


Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 15 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Buscar

Cargando...

Últimos comentarios

  • graffic
  • reidrac
  • reidrac
  • Wu
  • dilam
  • r0sk
  • reidrac
  • r0sk
  • chucu
  • r0sk
  • el_palomo_programador
  • r0sk
  • reidrac
  • Player 1
  • r0sk

Moneting

Valor de mi cuenta de Facebook según Moneting
Valor de mi cuenta de Twitter según Moneting

Tagcloud

barça cakephp django juegos league macosx champions web personal sidenotes cake bsd ubuntu ds twitter cumpleaños bake ps3 programación rfilms rsidenotes felicidades userlinux sysadmin blog games nintendo conciertos php mysql deportes blogsfera apple iphone futbol vacaciones canción debian alemania_2006 linux bash 2008 python seguridad freebsd twitt humor ssh lucux mac mundial 2007 meme hack opinion films frases lugo openbsd blogs

Archivo

Social

Enlaces de interés