0

在关于如何解决我的一个问题(http://stackoverflow.com/questions/13609611/using-several-modules-in-the-same-view)的一些问题之后,我还有另一个问题。

我在视图助手中创建了一个表单,因为我需要在另一个控制器中访问此表单的结果。

所以这是我的视图助手,名为 QuickSearch.php

class Zend_View_Helper_QuickSearch extends Zend_View_Helper_Abstract
{
    public function quickSearch()
    {
    $form = new Application_Form_QuickSearchForm();
    return $form;
    }
}

调用 QuickSearchForm.php

class Application_Form_QuickSearchForm extends Zend_Form

{

public function init()
{
    $this->setMethod('post');
    $this->setAction('/search/quicksearch');
    $this->addElement('text', 'searchLocation', array(
            'label' => 'Location:',
            'required' => true,
            'filters' => array('StringToUpper')
            ));
    //[some other elements]
    $this->addElement('submit', 'submit', array(
            'ignore'   => true,
            'label'    => 'Search',
    ));
}

在我的主页视图中,我调用 viewhelper

echo $this->quickSearch();

哪个有效,因为我可以访问我的表格。

当我提交表单时, /search/quicksearch 被调用,但是当我尝试从表单访问数据时,它似乎是空的。

这是我的搜索控制器(SearchController.php)

class SearchController extends Zend_Controller_Action
{

public function init()
{
    /* Initialize action controller here */
}

public function indexAction()
{
    // action body
}

public function quicksearchAction()
{
    $form = new Application_Form_QuickSearchForm();

    if ($this->getRequest()->isPost())
    {
        echo("post");
        $data = $form->getValues();
        echo($data['searchLocation']);
    }

}

}

我放了 echo("post") 来查看我是否收到了 POST 请求,并且每次都有效。唯一显示的是“帖子”,第二个回声不显示任何内容。

我不知道从另一个控制器获取表单数据的方式我不明白什么。

有人可以帮我弄这个吗 ?我只是不知道为什么它不起作用。

4

1 回答 1

2

您需要将发布数据传递给表单对象。执行此操作的典型方法是调用isValid()表单的方法(它也验证提交的数据):

public function quicksearchAction()
{
    $form = new Application_Form_QuickSearchForm();

    if ($this->getRequest()->isPost()) {
        if ($form->isValid($this->getRequest()->getPost()) {
            $data = $form->getValues();
            echo $data['searchLocation'];
        }
    }
}
于 2012-11-29T19:32:08.927 回答