====== Les Routes dans Symfony ======
===== Routage =====
==== En Annotations ====
...
use Symfony\Component\Routing\Annotation\Route;
...
class CheckVersionController
{
/**
* @Route("/api/checkv", name="api_checkversion")
==== 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
/**
* @Route("/api/checkv/{proj}", name="api_checkversion")
*/
public function check(string $proj)
{
return new Response('Projet:'.$proj);
}
==== 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()**
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 )
{...}
}
===== Générer des routes =====
==== Dans un Controller ====
Grâce a la méthode ''generateUrl'' de la classe AbstractController et ses descendants.
protected function generateUrl(string $route, array $parameters = [], int $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH): string
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 :
...
@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
====== Ressources ======
* [[https://symfony.com/doc/current/routing.html]]