start session_start predefinidas pasar paginas entre ejemplos ejemplo php zend-framework redirect http-status-code-302

session_start - variables de session php ejemplo



Redirigir a una nueva página con datos POST(PHP/Zend) (6)

Debido a que el cliente maneja la redirección después de la respuesta del servidor, no creo que pueda hacer mucho al respecto. Firefox, por ejemplo, le pregunta al usuario si desea volver a enviar los datos POST a la nueva ubicación o no.

Una solución desagradable sería llenar y devolver un formulario HTML y enviarlo automáticamente con JavaScript. : /

Estoy tratando de descubrir cómo redirigir a una nueva página (aplicación, controlador, acción) y mantener los datos POST actuales.

Mi aplicación está validando los datos POST y si se cumplen ciertos criterios, quiero redirigir a una ubicación diferente, pero asegúrese de que los datos POST se pasen como datos POST a esa página nueva. Aquí hay un ejemplo aproximado:

POST /app1/example HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded Content-Length: 17 var1=foo&var2=bar

En mi exampleAction (Zend_Controller_Action), exampleAction si var1 == foo , y si lo hago quiero redireccionar (302) a / app2 / example con los mismos datos POST. Algo así como esto?

HTTP/1.x 302 Found Location: /app2/example Content-Type: application/x-www-form-urlencoded Content-Length: 17 var1=foo&var2=bar

Puedo ver cómo crear una nueva solicitud HTTP usando Zend_Http_Client, pero no estoy buscando simplemente solicitar la página y mostrar el contenido. ¿Debo seguir buscando utilizar Zend_Http_Client de todos modos? En este momento estoy jugando con cosas como esta:

$this->getResponse()->setRedirect(''/app2/example/'', 302); $this->getResponse()->setBody(http_build_query($this->_request->getPost()));

Estoy seguro de que lo que quiero hacer es posible a través de engaños y cavorting de demonios, pero definitivamente me está aludiendo. Cualquier ayuda es apreciada.

- rk


En lugar de redirigir el navegador a la nueva ubicación, ¿por qué no reenviar la solicitud del controlador al otro controlador?

return $this->_forward("action", "controller", "module");



No estoy muy familiarizado con Zend específicamente, pero hay dos enfoques que tomaría para su problema:

  1. Almacene los datos POST en la sesión durante la vida de esa solicitud / redirección
  2. Establezca la redirección para que sea una POST y codifique los datos. En lugar de usar la redirección, simplemente envíe un nuevo encabezado con POST en lugar de GET.

Puede usar el helper de acción de redirector:

http://framework.zend.com/manual/1.12/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.redirector

Esto es trabajo para mí. Está pasando las credenciales de inicio de sesión de una pantalla de inicio de sesión a otra. El 307 puede hacer que el navegador advierta al usuario que se está produciendo el redireccionamiento, un 303 redireccionará y rellenará las credenciales en la página siguiente, pero no enviará el segundo formulario.

$baseUrl = ''https://example.com''; $this->_redirector = $this->_helper->getHelper(''Redirector''); $this->_redirector->setCode(307) ->setUseAbsoluteUri(true) ->gotoUrl($baseUrl . ''/home/login'', array(''username'' => $authForm->getValue(''username''), ''password'' => $authForm->getValue(''password'') ) );


Puede usar un objeto _request del controlador

$this->_request->setPost(array( ''someKey'' => ''someValue'' ));

Y luego simplemente use el _forward protected method

$this->_forward(''yourAction'', ''yourController'', ''yourModule'');

Luego, en acción de controlador reenviado simplemente llame

$aPost = $this->_request->getPost();