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/25 14:04] – jcheron | framework-web:symfony:routing [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 15: | Ligne 15: | ||
| ===== Création ===== | ===== Création ===== | ||
| + | |||
| + | Création de routes avec l' | ||
| <sxh php; | <sxh php; | ||
| Ligne 44: | Ligne 46: | ||
| // e.g. at / | // e.g. at / | ||
| + | // ... | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | Dans la console, la commande suivante liste les routes existantes : | ||
| + | |||
| + | <sxh bash; | ||
| + | php bin/console debug: | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== 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(' | ||
| + | ); | ||
| // ... | // ... | ||
| } | } | ||
| } | } | ||
| </ | </ | ||