Symfony 4 - Как избежать рендеринга формы в случае сбоя поиска в базе данных?

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

$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, просто вернул страницу без формы и т. д., Но это просто вызывает другие проблемы.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
50
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы действительно должны установить для $ 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 '.

Другие вопросы по теме