У меня есть форма, которая загружается на основе поиска из базы данных значения идентификатора из запроса на получение.
$Id = $request->query->get('id');
if (!empty($Id) && $Id != 'add') {
$search = $this->getDoctrine()
->getRepository(Clients::class)
->find($Id);
if (is_null($search))
$this->addFlash('danger', 'Invalid Client');
else
$form = $this->createForm(ClientViewType::class,$search);
}
else {
$form = $this->createForm(ClientViewType::class);
}
Вы можете видеть, что я добавляю сообщение «недействительный клиент», но проблема в том, что форма все равно будет отображаться. Есть ли способ не показывать форму? В основном я просто хочу, чтобы отображалось сообщение flashbag, и все.
Я пробовал кое-что, например, установил для $ form значение null, просто вернул страницу без формы и т. д., Но это просто вызывает другие проблемы.
Вы действительно должны установить для $ form значение null, если у вас недействительный клиент. Тогда в вашей ветке у вас может быть такой условный рендеринг:
{% if form is not null %}
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
{% else %}
{% for message in app.flashes('danger') %}
<div class = "flash-notice">
{{ message }}
</div>
{% endfor %}
{% endif %}
Напишите это:
if (is_null($search)) {
$this->addFlash('danger', 'Invalid Client');
return $this->render("...", [
"form" => null
...
]);
}
а затем в файле ветки сделайте следующее, если условие:
{% if form is not null %}
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
{% endif %}
Вы можете использовать малоизвестное предложение else
с условием for
{% for message in app.flashes('danger') %}
<div class = "flash-notice">
{{ message }}
</div>
{% else %}
{# your form #}
{% endfor %}
см. документация
Попробуйте вместо этого использовать instanceof.
if ($search instanceof Clients) {...}
Это помогло мне преодолеть некоторые из этих проблем.
Я согласен с другими ответами, особенно с iiirxs '.