Можно ли создать пользовательские атрибуты полей формы в Symfony 2?


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

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

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

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

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

Author: Jesse Greathouse, 2011-06-14

3 answers

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

<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

 19
Author: Ian Phillips, 2011-12-14 19:43:28

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

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

 1
Author: robotron2000, 2012-01-06 10:13:32

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

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

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

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

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

 0
Author: cwallenpoole, 2011-07-02 02:18:03