Salut. J’apprends à utiliser les groupes de routes sur Symfony, mais dès lors que je veux réactualiser la page, je tombe à chaque fois sur une erreur 404, avec pourtant une URL maintes fois vérifiée et qui est correcte.
<?php
// src/Controller/BlogController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
#[Route('/{_locale}/blog', requirements: ['_locale' => 'en|es|fr'], name: 'blog_')]
class BlogController extends AbstractController
{
#[Route('/', name: 'index')]
public function home(): Response
{
return new Response('<h1>Home</h1>');
}
#[Route('/{post<\d+>?1}', name: 'show')]
public function show(Request $request, string $post): Response
{
return new Response('<h1>Show article</h1>' . $request->attributes->get('_route') . ': ' . $post . '<br/>');
}
}
?>
J’ai cru que c’était en rapport avec le {_locale} mais l’enlever de l’URL globale du groupe n’y change rien. La classe ne fonctionne de nouveau que lorsque j’enlève le groupe et que j’accède directement aux routes individuellement. Même les priorités n’y changent rien.
Pourtant, la console m’affirme que les routes existent bel et bien et que le groupe est pris en compte.
-------------------------- -------- -------- ------ -----------------------------------
Name Method Scheme Host Path
-------------------------- -------- -------- ------ -----------------------------------
blog_index ANY ANY ANY /{_locale}/blog/
blog_show ANY ANY ANY /{_locale}/blog/{post}
J’ai néanmoins remarqué deux choses perturbantes : mon URL a tendance à finir par un index.php lorsque j’accède au dossier "public" (potentiellement sans rapport), mais surtout, lorsque je lance
php bin/console router:match /fr/blog
j’obtiens ça:
[~] php bin/console router:match /fr/blog
[OK] Route "blog_show" matches
+--------------+---------------------------------------------------------+
| Property | Value |
+--------------+---------------------------------------------------------+
| Route Name | blog_show |
| Path | /{_locale}/blog/{post} |
| Path Regex | {^/(?P<_locale>en|es|fr)/blog(?:/(?P<post>\d+))?$}sDu |
| Host | ANY |
| Host Regex | |
| Scheme | ANY |
| Method | ANY |
| Requirements | _locale: en|es|fr |
| | post: \d+ |
| Class | Symfony\Component\Routing\Route |
| Defaults | _controller: App\Controller\BlogController::show() |
| | post: 1 |
| Options | compiler_class: Symfony\Component\Routing\RouteCompiler |
| | utf8: true |
+--------------+---------------------------------------------------------+
Que faire ?