Я начал использовать Symfony2, но у меня есть некоторые проблемы. Я хотел визуализировать поля вручную, но это не работает, потому что мое поле, еще представленное мной, также отображается с помощью функции form_rest()
, поэтому у меня есть два одинаковых поля.
Вот мой код:
<div> {{ form_errors(form.contenu) }} <textarea id="{{ form.contenu.vars.id }}" name="{{ form.contenu.vars.full_name }}">{{ form.contenu.vars.value }}</textarea> </div>
И, в конце формы, я должен сказать следующее:
{{ form_rest(form) }}
Но он отображает поле «contenu» 🙁
У вас есть представление о том, в чем проблема?
Другой вариант – явно указать поле как отображаемое:
{% do form.contenu.setRendered %}
{{ form_rest(form) }}
идет в самом конце, после каждого поля «вручную». Если вы используете его для токена CSRF, вы всегда можете его отобразить:
{# Token CSRF #} {{ form_widget(form._token) }}
Другой, на мой взгляд, менее хакерский способ сделать это:
{{ form_end(form, {'render_rest': false}) }}
Это из официальной документации (v3.0), поэтому я думаю, что это практически лучшая практика .
Ситуация, в которой вы не хотите показывать какую-либо область, предлагает плохо разработанную форму. Вы можете прокормить некоторые аргументы в его __construct
чтобы сделать его условным (например, включить / исключить некоторые поля), или вы могли бы просто создать отдельные классы Form
(что, на мой взгляд, немного перебортовало).
У меня было общее дело несколько месяцев назад, когда форма отличалась от того, когда пользователь вставил / обновил записи. Это было примерно так:
... public function __construct($isUpdateForm){ $this->isUpdateForm= $isUpdateForm; } public function buildForm(FormBuilder $builder, array $options){ .... $builder->add('some_filed', 'text', ..... ); if ( $this->isUpdateForm ){ $builder->add(.....); } .... } ....
Если по каким-то причинам вы не можете реорганизовать класс формы, вы все равно можете отображать нежелательные поля, но переносите их в <div>
который имеет атрибут CSS display:none
. Таким образом, «они все еще там» (и, во всяком случае, обрабатываются нормально), но не отображаются пользователю.
Надеюсь это поможет…