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

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

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

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

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

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

Ответы

Ответ 1

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

<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

Ответ 2

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

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

Ответ 3

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

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

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

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

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