Zend-форма в контроллере и обработка этой формы определенным действием - как я могу это сделать? - PullRequest
1 голос
/ 20 мая 2011

Я мой макет У меня есть поисковая форма, поэтому она отображается на каждой странице. Это выглядит так:

<?
$form = new SearchIndexForm();
$form->setAction($this->configuration['BaseUrl']Index/search); 
echo $form; ?>

Мне бы хотелось, чтобы это было так: когда кто-то нажимает кнопку «Отправить», форма перенаправляет на действие «поиск» на контроллере «Индекс», где происходит обработка значений формы.

Итак, что я должен сделать, чтобы это было эквивалентно, что будет работать с данными, отправленными по почте методом из формы в макете?

if($this->_request->isPost()){
$formValues = $this->_request->getParams();
    if ($form->isValid($formValues)){
    ...
    }
}

С учетом вышесказанного, когда я нажимаю кнопку отправить, он попадает в / Index / search, но ничего не происходит ...

Сама форма отлично работала, когда была в одном действии.

1 Ответ

1 голос
/ 20 мая 2011

Кажется, вы все делаете правильно, но я думаю, что есть код, который вы должны изменить.

Попробуйте следующий код

</p> <pre><code> $request = Zend_Controller_Front::getInstance()->getRequest(); //or you can try //$request = $this->getRequest(); if($request->isPost()){ $form = new SearchIndexForm(); if ($form->isValid( $request->getPost() ) ){ echo 'This should output if the form is valid' . PHP_EOL; } }

Мне не нравится прямой доступ к переменным, как вы это сделали в $ this->_request, потому что Zend, возможно, придется делать что-то с переменными, чтобы сделать их «правильными».Я знаю, что иногда ничего не делается, но лучше, чем потом сожалеть.Если вы не уверены в этом, что я обычно не уверен, если я действительно посмотрел код.

...