Symfony forms

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

К примеру, создадим форму (с скрытым полем csrf-токена, который по-умолчанию генерируется как хэш имен полей формы).

$entity = array('id' => 0);
$formBuilder = $this->createFormBuilder($entity)
    ->add('rate', 'text', array(
        'attr' => array('rows' => 1),
        'label' => 'Цена работ:',
        'constraints' => [
            new Constraints\NotBlank(),
            new Constraints\Range(array('min' => 1))
        ]
    ))
    ->add('save', 'submit', array(
        'label' => 'Сохранить',
        'attr' => array('class' => 'btn btn-success')
    ));
$form = $formBuilder->getForm();

return array(
    'form' => $form->createView(),
    'errors' => $form->getErrors(true)
);

Самый простой способ вывести эту форму Twig-ом, это в написать:

{% form_theme form 'bootstrap_3_layout.html.twig' %}
{{ form(form, {'attr': {'novalidate': 'novalidate'}}) }}

Благодаря такой краткой записи, форма будет сама рисовать поля и выводить ошибки, если поле заполнено неверно.

{'attr': {'novalidate': 'novalidate'}} - нужно, если мы хотим, чтобы браузер не валидировал поля (современные браузеры умеют это делать, но пока плохо)

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

$formBuilder->setAction($this->generateUrl('RouteName'));

Однако, Вы можете захотеть отформатировать форму по-своему, и тогда Вам пригодится следующий пример:

<form method="post" action="{{ path("RouteName", {id : form.vars.value.id}) }}" novalidate {{ form_enctype(form) }}>
      {# тут выведется ошибка протухшего csrf-токена (если она появляется) #}
      {{ form_errors(form) }}
      <b>{{ form_label(form.rate, 'Цена работ:') }} </b>:
         {{ form_widget(form.rate) }}
         {{ form_errors(form.rate) }}
      <input type="submit" class="btn btn-primary" value="Опубликовать">
      {# поля, про которые забыли: #}
      {{ form_rest(form) }}
</form>

Источники: 1 - 2- 3 - 4- 5 - 6 - 7- 8 - 9- 10 - 11- 12 - 13 - 14 - 15


13.11.2015 14:52

Комментарии

Комментариев пока нет.


Copyrights © 2007 - 2026 YaPro.Ru