Zend - 由视图助手从另一个控制器访问表单中的数据

时间:2012-11-29 19:04:49

标签: php forms zend-framework controller

在有关如何解决我的问题之后的一些问题(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请求,并且每次都有效。 显示的唯一内容是'post',第二个echo不显示任何内容。

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

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

1 个答案:

答案 0 :(得分: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'];
        }
    }
}