0

私の問題 (http://stackoverflow.com/questions/13609611/using-several-modules-in-the-same-view) の 1 つを解決する方法についていくつか質問した後、別の問題があります。

別のコントローラーでこのフォームの結果にアクセスする必要があったため、ビュー ヘルパーでフォームを作成しました。

ここに、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',
    ));
}

私のメインページビューでは、ビューヘルパーを次のように呼び出します

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 リクエストを受け取っているかどうかを確認し、それが機能するたびに確認しました。表示されるのは「投稿」だけで、2 番目のエコーでは何も表示されません。

別のコントローラーからフォームのデータを取得する方法で何が理解できなかったのかわかりません。

誰かがこれで私を助けることができますか? なぜうまくいかないのかわかりません。

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 に答える