¿Cuál es la diferencia entre redireccionamiento y reenvío en Zend framework?¿Cuál es la diferencia entre redirigir y reenviar en Zend framework
¿Cuándo deberíamos usar el redireccionamiento y cuándo debemos utilizar el reenvío?
¿Cuál es la diferencia entre redireccionamiento y reenvío en Zend framework?¿Cuál es la diferencia entre redirigir y reenviar en Zend framework
¿Cuándo deberíamos usar el redireccionamiento y cuándo debemos utilizar el reenvío?
_forward()
sólo hacia delante todo a otra acción del controlador, mientras que _redirect()
remata de cabeza, lo que significa que crear una nueva solicitud HTTP y va a través de todo el proceso de despacho con él.
Por ejemplo, si se llama a http://example.com/foo/bar que se podría llamar el controlador foo
y bar
acción. Si reenvía dentro de la acción bar
a la acción baz
, p. dentro de la misma solicitud, el navegador aún estaría en la misma URL, mientras que al hacer una redirección, ZF le indicaría al navegador que cargue http://example.com/foo/baz.
Esencialmente, _forward()
hace
$request->setActionName($action)
->setDispatched(false);
mientras _redirect()
hace
$this->_helper->redirector->gotoUrl($url, $options);
que suele hacer redirecciones cuando quiero evitar que vuelva a cargar una página que resulta en volver a colocar los datos del formulario.
Vea éstas:
Supongo que una redirección envía un 301/302 de vuelta al navegador con una nueva URL, mientras que un reenvío simplemente "reenvía" la solicitud a una acción de controlador diferente internamente pero mantiene la URL igual para que el navegador no lo haga t saber algo diferente.
La acción de redirección termina el proceso de página actual y vuelve a dirigir a otro. Todo el contexto cambiará (nuevo controlador/acción) a medida que el navegador recibe una redirección. Se conecta a una nueva URL
Considerando que el reenvío permanecerá en la misma página, pero no modificará el contexto. Puedes ver esto como una llamada a función. Sus vistas se cargarán como de costumbre.
1-redirect crear una nueva respuesta con header() de la información [302 encontrado o 301 == movido permanentemente] y su va a llegar al ciclo de expedición una vez más
cambio2-forward el flujo de ejecución a ese nuevo solicitud sin volver a entrar en el proceso de despacho de nuevo
que usaría _forward() para los casos en que desea que la URL para suspender el mismo - aunque tenga cuidado , significa cualquier clase controlador base que está utilizando se llama dos veces.
Esto puede parecer obvio o trivial, pero si no se tiene en cuenta, realmente puede arruinar el diseño de la aplicación, dado que la comprensión intuitiva del flujo es que una solicitud llama a una instancia de controlador. P.ej. significa que los singletons de ámbito de solicitud tienen para declararse como static
, o _forward() los romperán.
Imagine que recibe una llamada telefónica en la oficina. Alguien quiere hablar de ventas. Si dice "por favor llame al 123456" y cuelgue, esto es redirigir. Si dice "espere un minuto" y simplemente transfiere la llamada a ellos, esto es adelante. ;)
Si los pones en espera y te olvidas de ellos, ¿se trata de un ciclo infinito? –
@Tim Fountain He estado atrapado en ese circuito con Time Warner Cable durante 15 años. – kenitech