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

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

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

Ответы [ 4 ]

0 голосов
/ 27 сентября 2018

Попробуйте вместо этого использовать instanceof.

if ($search instanceof Clients) {...}

Это помогло мне преодолеть некоторые из этих проблем.

Я согласен с другими ответами, особенно с iiirxs '.

0 голосов
/ 26 сентября 2018

Напишите это:

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 %}
0 голосов
/ 27 сентября 2018

Вы можете использовать не известное предложение else с условием for

{% for message in app.flashes('danger') %}
    <div class="flash-notice">
        {{ message }}
    </div>
{% else %}
   {# your form #}
{% endfor %}

см. документация

0 голосов
/ 26 сентября 2018

Вы действительно должны установить $ 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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...