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>

Об урлах

Я предпочитаю писать просто

    /**
     * форма добавления/редактирование компании
     * @Route("/formCompany/", name="formCompany")
     * @Template()
     */
    public function formCompanyAction()
    {
        $id = (int)$request->get('id');

1. благодаря тому, что мы указали в конце роута слэш, симфони будет редиректить посетителя сайта с страницы /formCompany на страницу /formCompany/

2. как видите, я обрабатываю GET-параметр вручную и в большинстве случаев это удобнее, чем писать:

* @Route("/formCompany/{id}", defaults={"id" = 0}, name="formCompany")

потому что при дополнительном параметре, придется расширять роут-правило + это принесет ненужную нагрузку на парсер роутинга.

3. в месте, где нужно указать, какую строку мы будем изменять, мы напишем:

<a href="{{ url('formCompany', { id : 123 }, true) }}">Изменить</a>

true - здесь говорит о том, что id является GET-параметром, а не параметром роута.

Если нужен красивый URI

То придется в роуте прописать значение по-умолчанию

@Route("/formCompany/{id}", defaults={"id" = 0}, name="formCompany")

т.к. если не прописать defaults, то twig будет ругаться на построение пути без указания id:

{{ path('formCompany') }}

и будет прав, т.к. id является обязательным, поэтому придется написать:

{{ path('formCompany', { id : 123 }) }}

Удачки.

Оцени публикацию:
  • 0,0
Оценили человек: 0

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

Новые заметки:

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

Последние комменты:

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2018 YaPro.Ru

Главная » Веб-мастеру » PHP »