Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
framework-web:symfony:routing [2018/01/31 00:51] – [Création] jcheron | framework-web:symfony:routing [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 59: | Ligne 59: | ||
- | ===== Paramètres de route ===== | + | ===== Paramètres de route et requirements |
+ | Les paramètres de routes sont passés à l'aide des accolades : | ||
+ | <sxh php; | ||
+ | namespace App\Controller; | ||
+ | |||
+ | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
+ | use Symfony\Component\Routing\Annotation\Route; | ||
+ | |||
+ | class BlogController extends Controller | ||
+ | { | ||
+ | /** | ||
+ | * @Route("/ | ||
+ | */ | ||
+ | public function list($page) | ||
+ | { | ||
+ | // ... | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * @Route("/ | ||
+ | */ | ||
+ | public function show($slug) | ||
+ | { | ||
+ | // ... | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Dans l' | ||
+ | |||
+ | Le router choisira toujours dans ce cas la première correspondance trouvée : la route **blog_list**, | ||
+ | |||
+ | Il est possible d' | ||
+ | |||
+ | On ajoute dans ce cas un " | ||
+ | |||
+ | <sxh php; | ||
+ | namespace App\Controller; | ||
+ | |||
+ | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
+ | use Symfony\Component\Routing\Annotation\Route; | ||
+ | |||
+ | class BlogController extends Controller | ||
+ | { | ||
+ | /** | ||
+ | * @Route("/ | ||
+ | */ | ||
+ | public function list($page) | ||
+ | { | ||
+ | // ... | ||
+ | } | ||
+ | |||
+ | // ... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Valeur par défaut ===== | ||
+ | Il est possible de donner à un paramètre une valeur par défaut : | ||
+ | <sxh php; | ||
+ | namespace App\Controller; | ||
+ | |||
+ | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
+ | use Symfony\Component\Routing\Annotation\Route; | ||
+ | |||
+ | class BlogController extends Controller | ||
+ | { | ||
+ | /** | ||
+ | * @Route("/ | ||
+ | */ | ||
+ | public function list($page = 1) | ||
+ | { | ||
+ | // ... | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Méthode HTTP ===== | ||
+ | L' | ||
+ | |||
+ | <sxh php; | ||
+ | namespace App\Controller; | ||
+ | |||
+ | // ... | ||
+ | |||
+ | class BlogApiController extends Controller | ||
+ | { | ||
+ | /** | ||
+ | * @Route("/ | ||
+ | */ | ||
+ | public function show($id) | ||
+ | { | ||
+ | // ... return a JSON response with the post | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * @Route("/ | ||
+ | */ | ||
+ | public function edit($id) | ||
+ | { | ||
+ | // ... edit a post | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Paramètres de routage spéciaux ===== | ||
+ | |||
+ | 4 paramètres spéciaux sont utilisable au niveau des routes : | ||
+ | |< | ||
+ | ^ _controller | Permet de spécifier le contrôleur à exécuter quand la route est sollicitée. | | ||
+ | ^_format | Utilisé pour définir le format de la requête (html, json...) voir [[https:// | ||
+ | ^_fragment | Utilisé pour définir le fragment après le # dans le cas d'une url interne à la page | | ||
+ | ^_locale |Utilisé pour définir la " | ||
+ | |||
+ | Exemple : | ||
+ | |||
+ | <sxh php; | ||
+ | |||
+ | // ... | ||
+ | class ArticleController extends Controller | ||
+ | { | ||
+ | /** | ||
+ | * @Route( | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | * ) | ||
+ | */ | ||
+ | public function show($_locale, | ||
+ | { | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Génération d'URLs ===== | ||
+ | |||
+ | ==== Depuis un contrôleur ==== | ||
+ | |||
+ | <sxh php> | ||
+ | class MainController extends Controller | ||
+ | { | ||
+ | public function show($slug) | ||
+ | { | ||
+ | // ... | ||
+ | |||
+ | // / | ||
+ | $url = $this-> | ||
+ | ' | ||
+ | array(' | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== URL avec paramètres ==== | ||
+ | Les variables supplémentaires sont ajoutées en tant que query string : | ||
+ | <sxh php> | ||
+ | $this-> | ||
+ | ' | ||
+ | ' | ||
+ | )); | ||
+ | // / | ||
+ | </ | ||
+ | |||
+ | ==== Génération depuis un service ==== | ||
+ | |||
+ | Il est nécessaire d' | ||
+ | |||
+ | <sxh php; | ||
+ | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | ||
+ | |||
+ | class SomeService | ||
+ | { | ||
+ | private $router; | ||
+ | |||
+ | public function __construct(UrlGeneratorInterface $router) | ||
+ | { | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | public function someMethod() | ||
+ | { | ||
+ | $url = $this-> | ||
+ | ' | ||
+ | array(' | ||
+ | ); | ||
+ | // ... | ||
+ | } | ||
+ | } | ||
+ | </ |