Я пытаюсь создать форум, который использует как можно меньше шаблонов, чтобы быть действительно динамичным, используя базу данных для заполнения форума.
Я хотел бы, чтобы мой контроллер проверил базу данных и удостоверился, что 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-адреса каждой страницы и являются полностью динамическими.
Заранее спасибо, если вам нужна дополнительная информация в комментариях, и я могу обновить этот пост.