Zend Framework 2 - действия с формой обработки

В Zend Framework 2 я создал класс, который расширяет Zend\Form\Form под MyForm.

В indexAction одного класса контроллера я инициализирую MyForm следующим образом:

public function indexAction()
 {
 $form = new MyForm('my-name');
 $viewModel = new ViewModel(array('form' => $form));
 return $viewModel;
 }

Тогда в соответствующем представлении я в основном просто делаю

$form = $this->form;
$form->prepare();

echo $this->form()->openTag($this->form);
echo $this->formCollection($form);
echo $this->form()->closeTag();

Все это работает, но вы, возможно, заметили, что действие для формы отсутствует.

Я попытался добавить действие, подобное этому в представлении:

$form->setAttribute('action', $this->url(NULL, array('controller'=>'Index', 'action' => 'go')));

Затем в действии go внутри моего IndexController у меня есть это для тестирования:

public function goAction()
 {
 die('huh');
 }

Это совсем не сработало, я всегда приземляюсь на вид формы (== index action) снова. Почему действие go не выполняется?

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

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

Если для этого нет жестких правил: какое намерение общаются разные подходы?

Можно ли также добавлять действия формы в контроллер вместо представления?

1 ответ

Продолжая из комментариев: это не то, как работает помощник URL-адреса - если вы опускаете первый параметр, вместо этого используется текущий маршрут. Вероятно, поэтому вы не получаете форму, которую вы ожидаете.

Лично я всегда указываю имя маршрута при использовании помощника URL-адресов - делает вещи более ясными.

licensed under cc by-sa 3.0 with attribution.