Шаг 1 - создаём кастомную страницу \app\Resources\views\error404.html.twig
{% extends 'base.html.twig' %}
{% block body %}
<h1>Page not found</h1>
<p>
The requested page couldn't be located. Checkout for any URL
misspelling or <a href="{{ path('homepage') }}">return to the homepage</a>.
</p>
{% endblock %}
{% block title %}404 Page not found{% endblock %}
Шаг 2 - в контроллере создаём роут, который будет перехватывать все необработанные url и функцию page404() которая будет генерить 404 ошибку.
/**
* Данный роут перехватывает все переходы в системе, которые не охвачены другими роутами.
* @Route("/{anything}", name="not_found", defaults={"anything" = null}, requirements={"anything"=".+"})
*/
public function inner404Redirect()
{
return $this->page404();
}
public function page404()
{
$response = $this->render('error404.html.twig', []);
$response->setStatusCode(Response::HTTP_NOT_FOUND);
return $response;
}
Шаг 3 - для обработки ненайденных item используем вызов:
public function catAction(Request $request, $cat_id)
{
$cat_item=$this->getDoctrine()
->getRepository(Cat::class)
->find($cat_id);
if (!$cat_item) {
// если категория не найдена - отдаём 404
return $this->page404();
}
// ...
}//END