php - redireccionar - reenviar o redirigir
¿Cuál es la diferencia entre redirigir y reenviar en Zend framework (6)
1-redirigir crea una nueva respuesta con la información del encabezado () [302 encontrado o 301 == Movido de forma permanente] y volverá al ciclo de envío una vez más
2-forward cambiar el flujo de ejecución a esa nueva solicitud sin volver a ingresar el proceso de envío de nuevo
¿Cuál es la diferencia entre redirigir y reenviar en Zend framework?
¿Cuándo deberíamos usar la redirección y cuándo debemos utilizar el reenvío?
Imagina que recibes una llamada telefónica en la oficina. Alguien quiere hablar de ventas. Si dices "por favor llama al 123456" y cuelgas, esto es redirigido . Si dices "espera un minuto" y simplemente transfieres la llamada, esto es hacia adelante . ;)
La acción de redirección finaliza el proceso de la página actual y redirige a otra. Todo el contexto cambiará (nuevo controlador / acción) a medida que el navegador recibe una redirección. Se conecta a una nueva URL
Mientras que el forward se mantendrá en la misma página, pero no cambiará el contexto. Puedes ver esto como una llamada a función. Sus vistas se cargarán como de costumbre.
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 conozca ninguna otra .
Utilizaría _forward () para los casos en los que desee que la URL permanezca igual, aunque tenga cuidado , significa que cualquier clase de controlador base que esté utilizando se llama dos veces.
Eso puede parecer obvio o trivial, pero si no se tiene en cuenta, puede realmente arruinar el diseño de la aplicación, dado que la comprensión intuitiva del flujo es que una solicitud llama a una instancia del controlador. Por ejemplo, significa que los singleton de request-scope deben declararse como static
, o _forward () los romperá.
_forward()
simplemente reenvía todo a otra acción del controlador, mientras que _redirect()
envía un encabezado, lo que significa que creas una nueva solicitud HTTP y pasas por todo el proceso de envío con ella.
Por ejemplo, si llama a http://example.com/foo/bar , llamará al controlador foo
y a la acción de la bar
. Si reenvía dentro de la acción de bar
a la acción de baz
, por ejemplo, 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()
no
$request->setActionName($action)
->setDispatched(false);
while _redirect()
hace
$this->_helper->redirector->gotoUrl($url, $options);
Por lo general, redirecciono cuando quiero evitar que se vuelva a cargar una página que da como resultado la publicación de datos del formulario.
Ver estos: