Использование роутера внутри класса Symfony Form

1

Вот чего я пытаюсь достичь. Я использую 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';
    }
}
  • 0
    Если ваша форма зарегистрирована как служба (что, судя по my_form_foo ) имеет место, просто используйте arguments option для передачи маршрутизатора или используйте третий аргумент createForm и получите доступ к сгенерированному URL-адресу из $options .
  • 0
    @Artamiel, какую опцию я могу использовать для этого, потому что кажется, что я не могу просто добавить любую произвольную опцию, потому что она выдает «Опция ... не существует», когда я просто добавляю опцию «back_url».
Показать ещё 1 комментарий
Теги:

3 ответа

1
Лучший ответ

В вашем конкретном случае лучше использовать кнопки непосредственно в представлении.

(Что-то вроде того)

{{ form_start(form) }}
  {{ form_widget(form) }}

  <button type="submit" value="Save" />
  <a href="{{ path('name_route') }}" role="button">Back</a>

{{ form_end(form) }}
1

Вы можете ввести маршрутизатор в класс формы, если вы зарегистрируете свою форму как услугу в контейнере службы.

См.: http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html#creating-your-field-type-as-a-service

0

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

$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
}

Надеюсь, что эта помощь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню