Можно ли создавать пользовательские атрибуты полей формы в Symfony 2? - PullRequest
16 голосов
/ 14 июня 2011

В компоненте формы Symfony2 можно создавать собственные атрибуты?

Причина, по которой я спрашиваю, заключается в том, что я работаю над определенным крайним случаем, когда read_only будет недостаточно.

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

Если я начну с поля как read_only, оно будет отключено, но я никогда не смогу привязать к нему данные. Поэтому, учитывая результаты моей вышеупомянутой внешней логики, я не смогу использовать read_only. Поэтому у меня не остается другого выбора, кроме использования другого атрибута, который отключит поле.

Можно ли создать собственный атрибут для создания этого отключенного эффекта?

Ответы [ 3 ]

20 голосов
/ 14 декабря 2011

Я не уверен, что правильно понял ваш вопрос;Вы хотите добавить произвольные атрибуты в теги ввода формы?Например:

<input type="text" name="myInput" myAttr="myValue" />

Если это то, что вы хотите сделать, то это возможно, например:

$form = $this->createFormBuilder($someObj)
        ->add('myInput', 'text', array(
             'attr' => array('myAttr' => 'myValue')
        )
        ->getForm();

Документация здесь:

http://symfony.com/doc/2.0/reference/forms/types/field.html

1 голос
/ 06 января 2012

Трудно точно сказать, что вы хотите сделать, но звучит так, как будто вы хотите, чтобы динамически генерируемые формы основывались на каком-то событии, которое описано здесь:

http://symfony.com/doc/2.0/cookbook/form/dynamic_form_generation.html

0 голосов
/ 02 июля 2011

Ваше ограничение - не Symfony, ваше ограничение - HTML и HTTP.К сожалению, после выполнения HTTP-запроса, когда данные отправляются в браузер, сервер ничего не может сделать, чтобы изменить то, что отображается (ну, почти ничего, всегда есть Skynet).Единственный вариант - это JavaScript (и он может многое сделать, если они не используют Lynx).

Я видел ваш вопрос в группах Google и на основе их комбинации,Я могу вам сказать, что у вас есть только два варианта.

  • Вы можете сделать так, чтобы этот параметр отображался как ответ на ваш первый ответ из браузера.
  • Вы можете использовать JavaScript изатем обработайте все ошибки на стороне сервера.

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

Кстати, чтобы отключить поле формы в Symfony, пошаговые инструкции: здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...