在有关如何解决我的问题之后的一些问题(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',
));
}
在我的主页面视图中,我使用
调用viewhelperecho $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不显示任何内容。
我不知道从另一个控制器获取表单数据的方式我不明白。
有人可以帮我吗?我只是不知道为什么它不起作用。
答案 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'];
}
}
}