2009-12-09 15 views
5

Mi situación:¿Cómo hacer que CakePHP redirija a una acción/controlador diferente?

Al usuario se le presenta una tabla o una lista de elementos. Al lado de cada elemento, pueden hacer clic en una casilla de verificación para seleccionarlo y, a continuación, en la parte inferior, un cuadro de selección que dice "Con elementos seleccionados ..." y cosas como "eliminar", "mover al proyecto", "descargar", etc. Ya conoces el trato: operaciones a granel. Algunas de las operaciones se ejecutarán de inmediato y no requieren su propia vista, sin embargo, otras necesitarán una vista intermedia (p. Ej .: "¿Moverlas a qué proyecto?").

Dado que cada una de las operaciones individuales es manejada por una acción diferente (y diferentes controladores, posiblemente), pero los formularios solo pueden enviarse a una dirección, necesito una acción que tome los datos publicados y los envíe al lugar apropiado .

El uso de redirect() tampoco funcionará, ya que será necesario utilizar AJAX en un futuro próximo.

Básicamente sólo quiero una acción que va a delegar a un controlador diferente/acción como si fuera la solicitud original: el mantenimiento de datos de correos, lo que hace que la visión, etc.

¿Alguna idea?

Respuesta

9

Pude resolverlo con el Dispatcher.

// for example, to reroute to users/delete 

// this is in the controller which receives the request. 
// this could even be in the AppController 

$this->autoRender = false; 
$d = new Dispatcher(); 
$d->dispatch(
    array("controller" => "users", "action" => "delete"), 
    array("data" => $this->data) 
); 
-1

Si sigue el patrón de diseño MVC, no tendrá ningún problema con eso, ya que la lógica comercial debe estar en los Modelos, no en las acciones del Controlador.

De todos modos, puede crear una acción "masiva" que llamará a todos los demás en busca de algunos datos para trabajar.

+0

yep - ¿cómo puedo hacer eso? ¿Cómo invoco una acción diferente en un controlador diferente? – nickf

+0

"llamada", por decir, no es muy recomendable. Pero puedes instanciar los controladores deseados dentro del primero. Aún así, la mejor opción es tener Modelos haciendo ese trabajo, y tener un único controlador de acción bulk(), por ejemplo. Las cosas serán mucho más fáciles de manejar cuando conectas a ajax, por cierto – yoda

Cuestiones relacionadas