Yeni sayfa w / POST verileri (PHP / Zend) yönlendir

6 Cevap php

Ben yeni bir sayfa (farklı uygulama, denetleyici, eylem) yönlendirme ve mevcut POST verileri korumak için nasıl anlamaya çalışıyorum.

Benim app POST verileri doğrulama ve belli kriterleri yerine ise, ben farklı bir yere yönlendirmek istiyorum, ama POST verileri bu yeni sayfaya POST veri olarak geçirilir emin olun. Burada kaba bir örnek:

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

Benim exampleAction (Zend_Controller_Action), eğer ben var1 == foo görmek için kontrol edin ve ben aynı POST veri için / app2/example (302) yönlendirmek istiyorsanız eğer. Belki de böyle bir şey?

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

Ben Zend_Http_Client kullanarak yeni bir HTTP isteği oluşturmak için nasıl görebilirsiniz, ama ben aramıyorum sadece sayfayı istemek ve içeriğini görüntülemek. Ben hala yine Zend_Http_Client kullanmak isteyen olmalı? Şu anda ben böyle şeylerle oynuyorum:

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

Ben ne yapmak istiyorum hile ve iblis-cavorting bazı yollarla mümkün olduğundan emin değilim, ama kesinlikle beni kastederek oluyor. Herhangi bir yardım takdir edilmektedir.

- Rk

6 Cevap

Aksine yeni konuma tarayıcı yönlendirme yerine, neden sadece diğer denetleyiciye denetleyicisi isteğini iletmek değil?

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

IMO POST ile bir Redirect yapamazsınız. Bkz http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3

Olarak zaten Oturumunda içinde POST-Veri tasarrufu söyledi.

Bir Denetleyici _REQUEST nesnesi kullanabilirsiniz

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

Ve sonra sadece _forward korumalı yöntemi kullanın

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

Sonra, iletilen denetleyicisi eylem sadece çağrı

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

İstemci sunucunun yanıtını sonra yönlendirmeyi kolları Çünkü bu konuda çok fazla bir şey yapabileceğimi sanmıyorum. Örneğin Firefox o / o yeni bir konuma ya da değil POST verileri yeniden isteyip istemediğini kullanıcıya sorar.

Bir kötü çözüm doldurun ve geri bir HTML formu ve JavaScript ile otomatik teslim olacaktır. :/

Ben özellikle Zend ile çok aşina değilim, ama senin sorunun alırdım iki yaklaşım vardır:

  1. Bu istek / yönlendirme yaşam için oturumunda POST verileri depolamak
  2. POST olmak için yönlendirme ayarlayın ve veri kodlamak. Bunun yerine yönlendirme kullanarak, sadece yerine GET POST ile yeni bir başlık göndermek.

Sen yönlendirici eylem yardımcısı kullanabilirsiniz:

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

Bu benim için çalışıyor. Bu başka bir giriş ekranından giriş kimlik geçiyor. 307 yönlendirme oluştuğunu kullanıcıyı uyarmak için tarayıcı neden olabilir, bir 303 yönlendirme ve sonraki sayfada kimlik doldurmak, ancak ikinci formu göndermek olmaz.

$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')
        )
   );