Вот чего я пытаюсь достичь. Я использую SymfonyContrib\Bundle\LinkButtonBundle\LinkButtonBundle
чтобы добавить простую ссылку назад/отменить в мою форму прямо рядом с кнопкой отправки. Проблема в том, что я не знаю, как добраться до моего маршрутизатора, чтобы я мог использовать метод generate для генерации URL-адреса маршрута. У любого есть идея, как либо ввести маршрутизатор в мою форму, либо передать URL-адрес от моего контроллера, где форма создана с помощью $this->createform('my_form_foo')
<?php
namespace My\Form;
use \Symfony\Component\Form\AbstractType;
use \Symfony\Component\Form\FormBuilderInterface;
class Foo extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'username',
null,
[
'label' => 'Username',
'attr' => [
'placeholder' => 'User name',
],
'required' => true
]
)
->add('actions', 'form_actions', [
'buttons' => [
'save' => [
'type' => 'submit'
],
'cancel' => [
'type' => 'button',
'options' => [
'url' => '/', // This needs to be generated from a route
'label' => 'Back'
]
],
]
]);
}
/**
* @return string
*/
public function getName()
{
return 'my_form_foo';
}
}
В вашем конкретном случае лучше использовать кнопки непосредственно в представлении.
(Что-то вроде того)
{{ form_start(form) }}
{{ form_widget(form) }}
<button type="submit" value="Save" />
<a href="{{ path('name_route') }}" role="button">Back</a>
{{ form_end(form) }}
Вы можете ввести маршрутизатор в класс формы, если вы зарегистрируете свою форму как услугу в контейнере службы.
Я предлагаю вам управлять всеми действиями формы в классе контроллера. Как описано в документе, вы можете добавить свою кнопку для управления потоком:
$form = $this->createFormBuilder($task)
->add('name', 'text')
->add('save', 'submit')
->add('save_and_add', 'submit')
->getForm();
Управляйте потоком в контроллере следующим образом:
if ($form->isValid()) {
// ... do something
// the save_and_add button was clicked
if ($form->get('save_and_add')->isClicked()) {
// probably redirect to the add page again
}
// redirect to the show page for the just submitted item
}
Надеюсь, что эта помощь
my_form_foo
) имеет место, просто используйтеarguments
option для передачи маршрутизатора или используйте третий аргументcreateForm
и получите доступ к сгенерированному URL-адресу из$options
.