0

那是我的表格:

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 中调用我的表单。

4

1 回答 1

0

您发布的代码中有错字。重定向行应该是$this->_redirect('Search/Results');

假设这只是您的问题中的错字,而不是您的代码中的错字,IIRC 使用$this->_redirect()发送带有Location 标头的HTTP 302 Found响应,这会导致浏览器使用 GET 请求加载新页面。因此,如果 POST 数据未包含在 Location 标头的 URL 中,它将丢失。

您可以使用$this->_forward()来避免 302 重定向,只需让 ZF 加载不同的模块/控制器/操作。您也可以使用此方法来传递参数。

否则,为什么要转发或重定向?为什么不继续处理数据并使用您searchresultAction自己显示结果呢?

于 2012-08-19T17:55:22.507 回答