这是我的表格:
class Application_Form_Search extends Zend_Form {
public function init() {
$searchFor = new Zend_Form_Element_Text(array('name' => 'searchFor', 'class' => 'input-text search-box', 'value' => 'Search'));
$searchFor->setAttribs(array('onclick' => 'this.value="";', 'onfocus' => 'this.select()', 'onblur' => 'this.value=!this.value?"Search":this.value;'))
->setDecorators(array('ViewHelper',));
$submit = new Zend_Form_Element_Submit(array('name' => 'search', 'class' => 'input-submit-search search-box', 'label' => ''));
$submit->setDecorators(array('ViewHelper',));
$this->addElements(array($searchFor, $submit));
}
}
这是我的搜索行动:
public function searchresultAction() {
$form = new Application_Form_Search();
if ($this->getRequest()->isPost()) {
$postdata = $this->getRequest()->getPost();
if ($form->isValid($postdata)) {
$this->_redirect('Search/Results);
}
}.......
问题是,当我点击提交按钮时,我不会重定向到搜索/结果,在postdata中没有值。我在layout.phtml中调用我的表单。
答案 0 :(得分:0)
您发布的代码中有拼写错误。重定向行应为$this->_redirect('Search/Results');
假设这只是您问题中的拼写错误而不是代码中的问题,IIRC使用$this->_redirect()
发送HTTP 302 Found响应并使用Location header,这会导致浏览器使用{0}}加载新页面一个GET请求。因此,如果POST数据未包含在Location标头的URL中,则它将丢失。
您可以使用$this->_forward()
来避免302重定向,只需让ZF加载不同的模块/控制器/操作即可。您也可以使用此方法传递参数。
否则,为什么要转发或进行重定向?为什么不继续处理数据并使用searchresultAction
本身显示结果?