dongxun8189 2018-09-26 16:21
浏览 42
已采纳

Symfony 4 - 如果数据库查找失败,如何避免呈现表单?

I have a form which loads based on a lookup from the database of a id value from a get request.

$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);
}

You can see I'm adding a flashbag message of 'invalid client', but the problem is the form will still show. Is there some way to not show the form? Basically I just want the flashbag message to display and that's it.

I tried some things - i.e. setting $form to null, just returning the page, without the form, etc. but that just forces other problems.

  • 写回答

4条回答 默认 最新

  • douquanzhan0315 2018-09-26 17:19
    关注

    You should indeed set $form to null when you have an invalid client. Then in your twig you could have a conditional rendering like this:

    {% 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 %}
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?