如果页面存在,则Symfony 4使用URL来检查数据库404

时间:2018-05-01 04:02:57

标签: symfony4

我正在尝试使用数据库填充论坛来构建一个使用尽可能少的模板的论坛。

我想要做的是让我的控制器检查数据库并确保URL存在。

对象是只存在存在的页面。因此,有人在地址host.com/forum/foo/bar中输入错误消息' 404页面不存在'而不是空白的索引模板。

我正在使用Symfony 4,Docrine,Twig,Annotations&各种其他插件

当前代码

 //src/Controller/Controller.php

 /**
 * @Route("/forum/{category}/{slug}", name="page_topic")
 */
public function showTopic($slug){

    $repository = $this->getDoctrine()->getRepository(Topic::class);

    $topic = $repository->findOneBy(['name' => $slug]);



    return $this->render('forum/article.html.twig', ['topic' => $topic]);
}

这是主题页面的控制器,它当前循环主题中的所有主题。但是作为{category}&在页面加载之前未检查{slug}你可以输入任何内容,并且不会出现任何错误,只有一个带有空白部分的模板。 (我确实尝试{topic}而不是{slug},但由于我无法解决如何处理检查,它会给出错误)

//templates/forum/article.html.twig

{% extends 'forum/index.html.twig' %}

{% block forumcore %}
    <div id="thread list">
        <h4>{{ topic.name }}</h4>
        <ul>
            {% for thread in topic.childThreads %}
                <li><a href="/forum/{{category.name}}/{{ topic.name }}/{{ thread.name }}"><h6>{{ thread.name }}</h6></a></li>
            {% endfor %}
        </ul>
    </div>
{% endblock %}

正如您从树枝模板中看到的,链接依赖于实体的$ name字段来生成每个页面的URL,并且是完全动态的。

提前致谢,如果您需要在评论中弹出更多信息,我可以更新此帖子。

1 个答案:

答案 0 :(得分:0)

为了了解当前URL是否找到了某个项目,您可以测试$topicNULL

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

/**
* @Route("/forum/{category}/{slug}", name="page_topic")
*/
public function showTopic($slug){
    $repository = $this->getDoctrine()->getRepository(Topic::class);
    $topic = $repository->findOneBy(['name' => $slug]);
    if ($topic === null) throw new NotFoundHttpException('Topic was not found'); // This should activate the 404-page
    return $this->render('forum/article.html.twig', ['topic' => $topic]);
}