Новое в Symfony 2.3: Добавление кнопок в формах

В первый раз когда я прочитал об этой функции, я был настроен в лучшем случае скептически. Зачем нужно иметь возможность настраивать кнопками в ваших формах, ведь все что мы може сделать с кнопкой — просто отобразить? Я был неправ, и более того, Бернхард сделал большую работу, реализовав эту новую функцию.

В Symfony 2.3, вы можете добавить кнопки в формы, как и любые другие поля:

$form = $this->createFormBuilder($task)
    ->add('name', 'text')
    ->add('save', 'submit')
    ->getForm();

Если мы генерируем форму стандартным методом {{form_widget (form)}}, кнопка будет  также отображена. Но такой случай нам очень интересен. Так, в каком случае нам может пригодиться новый функционал?

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

$form = $this->createFormBuilder($task)
    ->add('name', 'text')
    ->add('save', 'submit')
    ->add('save_and_add', 'submit')
    ->getForm();

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

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
}

И более того: валидационные группы могут быть различными для каждой кнопки. Это очень удобно, при работе с мастером форм:

$form = $this->createFormBuilder($task)
    // ...
    ->add('nextStep', 'submit')
    ->add('previousStep', 'submit', array(
        // disable validation
        'validation_groups' => false,
    ))
    ->getForm();

Конечно, эта функциональность является опциональной и формы, где только одна кнопка, вы можете продолжать создавать по старому.

Эта новая функция полностью описана в официальной документации; но, взглянув на documentation pull request мы подумали что это может быть полезным.

Добавить комментарий

Ваш адрес email не будет опубликован.

8 + пять =