I discover Symfony4 with similar blog sample like describe in https://symfony.com/doc/current/routing.html Then I added a new route to add /blog/about page. So a part of code in my src/Controller/BlogController.php is:
/**
* @Route("/blog/{id}", name="blog_show")
*/
public function show(Description $article) {
return $this->render('blog/show.html.twig', [
'article' => $article,
]);
}
/**
* @Route("blog/about", name="about")
*/
public function about() {
return $this->render('blog/about.html.twig', [
'copyright' => "GLPI 3",
]);
}
and when I run locahost:8000/blog/about, it returns me a 404 error :
App\Entity\Description object not found by the @ParamConverter annotation
After hours to find solution, I finally read https://symfony.com/doc/current/routing.html and understand that the /blog/{id} annotation catch /blog/about route but can't use it!
By switching functions order in my controller file:
/**
* @Route("/blog/about", name="blog_about")
*/
public function about() {
return $this->render('blog/about.html.twig', [
'copyright' => "GLPI 3",
]);
}
/**
* @Route("/blog/{id}", name="blog_show")
*/
public function show(Description $article) {
return $this->render('blog/show.html.twig', [
'article' => $article,
]);
}
It works fine !
The solution as mentionned by @tom is the only one with severals entities and controllers !
If you add a requirement to the route, then the order doesn't matter.
eg.
/**
* @Route("/blog/{id}", name="blog_show", requirements={"id":"\d+"})
*/
The requirement is a regex.
In your case you have the same Method which is GET
Therefore, the first reached path is /blog/about and "about" is interpreted as an ID which not the case !
So the easiest way to solve this is to switch functions order:
/**
* @Route("/blog/about", name="blog_about")
*/
public function about() {
return $this->render('blog/about.html.twig', [
'copyright' => "GLPI 3",
]);
}
/**
* @Route("/blog/{id}", name="blog_show")
*/
public function show(Description $article) {
return $this->render('blog/show.html.twig', [
'article' => $article,
]);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With