Форма Zend setAction отправляется на неправильный URL - PullRequest
1 голос
/ 30 марта 2012

У меня проблема с setAction в форме Zend. У меня многостраничная форма, и для всех подчиненных форм я установил одно и то же действие

$subForm->setAction('process')
        ->setMethod('post');

мои формы отображаются в действии индекса, контроллере приложения, модуле покупателя http://localhost/project/public/buyer/application но когда я отправляю, URL-адрес формы перенаправляется / публикуется на URL: http://localhost/project/public/buyer/process (на страницу, которая не существует)

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

Я пытался использовать весь URL, но, похоже, он не работает, т.е. $subForm->setAction('buyer/applciation/process') или $subForm->setAction('application/process')

Ответы [ 6 ]

2 голосов
/ 30 марта 2012

Мне всегда было проще всего установить атрибут действия формы из представления с помощью помощника Url.Попробуйте вот так

<?php echo $this->form->setAction($this->url(array(
    'action' => 'process'
))) ?>
1 голос
/ 30 марта 2012

Я выяснил, что не так с моим кодом. Кажется, что Zend рассматривал мой URL: - http://localhost/project/public/buyer/application как контроллер покупателя и действие приложения, т. Е. Так как действие является индексным, а оно не включено в мой URL.то, что сделал бы мой кусок кода $form->setAction('process');, это просто заменил бы «приложение» на «процесс» http://localhost/project/public/buyer/process, предполагая, что это приложение было действием.Если я не ошибаюсь, это может быть ошибкой, или так может показаться.

Я переименовал свой индекс действий в форму, и теперь он, кажется, работает.Хотя мне понравилось, как @Phil предложил.Но просто наложи на кого-то еще woul

0 голосов
/ 30 марта 2012

мне кажется, что проблема в том, что process не является действием в контроллере. Это больше похоже на вызываемый метод или класс. То, что вы увидите чаще всего в ZF, это настроить действие формы на действие.

//set form action to a controller action where you can call process against the form.
$form->setAction('action')//or 'controller/action' or 'module/controller/action'

В справочнике ZF довольно широко обсуждается, как сделать многочастные формы

0 голосов
/ 30 марта 2012

до

$subForm->setAction($this->getView()->url(array('action'=>'process','controller'=>'application','module'=>'buyer'),null,true))
        ->setMethod('post');
0 голосов
/ 30 марта 2012

Когда вы сделали $ subForm-> setAction ('process'), это, по сути, установило относительный путь к URL-адресу в / project / public / покупатель / приложение, что означает, что предполагается, что каталоги проекта, общественности и покупателя являются каталогами.и процесс должен быть на том же уровне, что и приложение.

Попробуйте это:

$this->form->setAction('/application/process');

Я не совсем уверен, что такое правильный URL, но я бы попробовал использовать этот URL сведущий / так что он больше не является относительным.

0 голосов
/ 30 марта 2012

У вас есть apache с правилами перезаписи, которые требуются ZF?

http://framework.zend.com/manual/1.10/en/project-structure.rewrite.html

...