Можно ли создать пользовательские атрибуты полей формы в Symfony 2?
В компоненте формы Symfony2 можно ли создавать пользовательские атрибуты?
Причина, по которой я спрашиваю, заключается в том, что я работаю над определенным крайним случаем, когда read_only будет недостаточно.
Вот сценарий: мне нужно связать данные на основе результатов некоторого внешнего логического анализа. Это очень важно, потому что у меня могут быть поля, которые по умолчанию отключены, но на основе внешней логики поля могут быть активированы. Я не могу использовать клиентские сценарии для получения такого результата, он должен быть отключен в атрибуте формы.
Если я начну с поля только для чтения, оно будет отключено, но я никогда не смогу привязать к нему данные. Поэтому, учитывая результат моей вышеупомянутой внешней логики, я не смогу использовать read_only. Таким образом, это не оставляет мне другого выбора, кроме как использовать другой атрибут, который сделает поле отключенным.
Можно ли создать пользовательский атрибут для создания этого отключенного эффекта?
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/cookbook/form/dynamic_form_generation.html
Ваше ограничение - это не Symfony, ваше ограничение - HTML и HTTP. К сожалению, как только HTTP-запрос будет выполнен, как только эти данные будут отправлены в браузер, сервер ничего не сможет сделать, чтобы изменить то, что отображается (ну, почти ничего, всегда есть Skynet). Единственный вариант - JavaScript (и это может многое сделать, если они не используют Lynx).
Я видел ваш вопрос в группах Google и, основываясь на их сочетании, могу сказать вам, что у вас есть только два варианта.
- Вы можете сделать так, чтобы эта опция отображалась в качестве ответа на первый полученный вами ответ от браузера.
- Вы можете использовать JavaScript, а затем обрабатывать любые сбои на стороне сервера.
Ваш лучший выбор? Я думаю, что пользователи оценят опцию JavaScript. В любом случае, это хорошая политика для проверки информации о пользователях на стороне сервера. Очевидно, сообщите пользователю об этом как можно скорее, выполнив проверку с помощью JavaScript, но вам нужно будет проверить их ввод на сервере в любом случае.
Кстати, чтобы отключить поле формы в Symfony, пошаговые инструкции здесь.