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


В методе класса форм buildForm (производном от AbstractType) могу ли я задать действие этой формы? То, что я хочу сделать, похоже на метод setAction, который я могу использовать при создании встроенной формы:

$form = $this->createFormBuilder()
  ->setAction($this->generateUrl('my_action'))
  ->add('field', 'text')
  ->add('button', 'submit');

Я имею в виду, является ли setAction эквивалентом классов форм?

Author: Elnur Abdurrakhimov, 2013-09-06

1 answers

Вы получаете доступ к тому же построителю форм в методе buildForm, поэтому просто вызов setAction на нем будет работать:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->setAction($path);
}

Вопрос в том, как вы передаете $path своему типу формы. Одним из способов было бы передать его в качестве опции при создании формы. Но если вы все равно передаете $path, почему бы просто не установить action сам?

$form = $this->createForm(new MyType(), $object, array(
    'action' => $this->generateUrl('my_action'),
));

Другим способом было бы ввести маршрутизатор в тип формы и использовать его для создания URL-адреса, но я не думаю, что это хорошая идея вид решений в виде формы.

 32
Author: Elnur Abdurrakhimov, 2013-09-06 09:42:11