Как сделать форму rest () не отображать поле с Symfony2?


Я начал использовать Symfony2, но у меня есть некоторые проблемы. Я хотел отрисовывать поля вручную, но это не работает, потому что мое поле, еще отрисованное мной, отображается с помощью

4 63

4 ответа:

другой вариант-явно пометить поле как визуализированное:

{% 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 . Таким образом, "они все еще там" (и все средства обрабатываются нормально), но не видны пользователю.

надеюсь, что это помогает...