Ответ 1
Я пропустил здесь этот вопрос? Если вы хотите настроить поле как отображаемое, даже если это не простой вызов:
{% do form.x.setRendered %}
Если я неправильно понял, мои извинения.
У меня есть простая проблема.
У меня есть форма с полем, например:
$builder
->add('x')
->add('y')
->add('z')
;
В моих файлах twig я использовал несколько блоков, и я хочу остановить поля рендеринга... Я просматриваю файл b.html.twig!
a.html.twig
{% block body %}
{% block form %}
{{ form_widget(form) }}
{% endblock form %}
{% endblock body %}
b.html.twig
{% block form %}
{{ form.x.set('rendered', true) | default() }}
{{ parent() }}
{% endblock form %}
Если я удалю "default()", я получаю ошибку, что объект can not может быть преобразован в строку. И на самом деле форма отображает все поля... Включая поле x. Но они не должны отображать поле x...
Спасибо заранее!
Я пропустил здесь этот вопрос? Если вы хотите настроить поле как отображаемое, даже если это не простой вызов:
{% do form.x.setRendered %}
Если я неправильно понял, мои извинения.
Вы должны удалить (или только добавить) поле формы в FormType, включив в него какую-то логику решения.
Например, проверка наличия/значения переменной cerain.
Затем эту переменную можно ввести в конструктор.
Удаление его из вашего шаблона - это логика приложения, которая не входит в ваш шаблон.
Если у вас нет другого выбора, посмотрите на метод FormView:: setRendered().
Вы можете получить доступ к объектным методам с помощью функции атрибутов Twigs :
{{ attribute(object, method, arguments) }}
Вы можете использовать следующую инструкцию закрытия, чтобы предотвратить поля формы рендеринга, которые определены в Форме, но не описаны в шаблоне:
{{ form_end(form, {'render_rest': false}) }}
Например, мы определяем следующую форму:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'id',
HiddenType::class,
array(
'required' => false
)
)
->add(
'name',
TextType::class,
array(
'required' => false
)
)
->add(
'comment',
TextType::class,
array(
'required' => false
)
)
->add(
'amount',
TextType::class,
array(
'required' => false
)
);
}
Для этой формы мы описываем следующий шаблон, но мы не хотим отображать поле id
, поэтому мы можем использовать опцию render_rest
в блоке form_end
, чтобы опустить рендеринг поля id
:
{{ form_start(form) }}
{{ form_row(form.name) }}
{{ form_row(form.comment) }}
{{ form_row(form.amount) }}
{{ form_end(form, {'render_rest': false}) }}