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 | ||
prog:symfony:routage:routes [22/10/2019 19:02] thierry [Les Routes dans Symfony] |
prog:symfony:routage:routes [11/09/2022 19:49] (Version actuelle) thierry ↷ Page déplacée de prog:symfony:routes:routes à prog:symfony:routage:routes |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Les Routes dans Symfony ====== | ====== Les Routes dans Symfony ====== | ||
- | ===== En Annotations ===== | + | ===== Routage ===== |
+ | |||
+ | ==== En Annotations ==== | ||
<code php> | <code php> | ||
+ | ... | ||
+ | use Symfony\Component\Routing\Annotation\Route; | ||
+ | ... | ||
class CheckVersionController | class CheckVersionController | ||
{ | { | ||
Ligne 8: | Ligne 13: | ||
</code> | </code> | ||
+ | ==== Récuperer une variable depuis le path de l'Url ==== | ||
+ | Dans l'exemple ci dessous on récupére la variable {proj} contenue dans la route. | ||
+ | |||
+ | Elle est transmise automatiquement a la fonction grâce a son nom ''proj''->$proj | ||
+ | <code php> | ||
+ | /** | ||
+ | * @Route("/api/checkv/{proj}", name="api_checkversion") | ||
+ | */ | ||
+ | public function check(string $proj) | ||
+ | { | ||
+ | return new Response('Projet:'.$proj); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ==== Routage en fonction de la méthord GET POST etc... ==== | ||
+ | Dans le code ci dessous, si l'appel est fait en ''GET'' on exécute la function **check()** | ||
+ | |||
+ | si l'appel est fait en ''POST'' ou ''PUT'' on exécute la function **add_project()** | ||
+ | <code php> | ||
+ | class MonController extends AbstractController | ||
+ | { | ||
+ | /** | ||
+ | * @Route("/api/checkv", name="api_checkVersion", methods={"GET"}) | ||
+ | */ | ||
+ | public function check(Request $request, SerializerInterface $serializer ) | ||
+ | {....} | ||
+ | |||
+ | /** | ||
+ | * @Route("/api/checkv", name="api_addProj", methods={"POST","PUT"}) | ||
+ | */ | ||
+ | public function add_project(Request $request, SerializerInterface $serializer ) | ||
+ | {...} | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | ===== Générer des routes ===== | ||
+ | ==== Dans un Controller ==== | ||
+ | Grâce a la méthode ''generateUrl'' de la classe AbstractController et ses descendants. | ||
+ | <code php vendor\symfony\framework-bundle\Controller\ControllerTrait.php> | ||
+ | protected function generateUrl(string $route, array $parameters = [], int $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH): string</code> | ||
+ | Avec les parametres : | ||
+ | * string ''$route'' : Le nom de la route a generer. | ||
+ | * array ''$parameters'' : les parametre a remplacer dans le nom de la route. | ||
+ | * integer ''$referenceType'' : Peut prendre les valeurs... | ||
+ | * ''ABSOLUTE_URL'' : Generates an absolute URL, e.g. "http://example.com/dir/file". | ||
+ | * ''ABSOLUTE_PATH'' : Generates an absolute path, e.g. "/dir/file". | ||
+ | * ''RELATIVE_PATH'' : Generates a relative path based on the current request path, e.g. "../parent-file". (@see UrlGenerator::getRelativePath()) | ||
+ | * ''NETWORK_PATH'' : Generates a network path, e.g. "/ /example.com/dir/file". Such reference reuses the current scheme but specifies the host. | ||
+ | |||
+ | Exemple : | ||
+ | |||
+ | <code> | ||
+ | ... | ||
+ | @Route("/api/checkv/{projname}", name="check_version", methods={"GET"}) | ||
+ | ... | ||
+ | $location = $this->generateUrl('check_version', ['projname' => 'ProjectTest'],UrlGeneratorInterface::ABSOLUTE_URL); | ||
+ | ... | ||
+ | Résultat: | ||
+ | http://127.0.0.1:8000/api/checkv/ProjectTest | ||
+ | </code> | ||
+ | |||
+ | |||
====== Ressources ====== | ====== Ressources ====== |