# Propriétés des routes
Une route est composée des éléments suivants.
Propriétés | Type | Obligatoire ? | Description | Multiple |
---|---|---|---|---|
priority | int | Facultatif (défaut 0 ) | Dans le cas où plusieurs pattern correspondent à une url donnée, la priorité ayant la valeur la plus élevée gagne | |
callable | string | Obligatoire | Fonction PHP à exécuter pour construire la réponse | |
methods | string | Obligatoire | méthode HTTP utilisable avec cette route | ✓ |
description | string | Facultatif (défaut ``) | Texte informatif sur la fonction de la route | |
pattern | string | Obligatoire | Chaîne de caractères permettant au routeur de sélectionner la route en fonction de l'url entrante | ✓ |
requiredAccess | null ou structure | Obligatoire | Indique si l'accès à la route nécessite un droit d'accès particulier | |
authenticated | bool | Facultatif (défaut true ) | Indique si la route nécessite une connexion authentifiée |
Astuce
Les éléments multiples peuvent être répétés plusieurs fois
# pattern
Le pattern est une chaîne de caractères qui sert au routeur pour sélectionner la route en fonction de l'url. La syntaxe est celle du projet slim framework. Les parties variables du pattern sont identifiées par des accolades.
Voici quelques exemples :
Pattern | url | Match ? | Args |
---|---|---|---|
my/myElement | http://example.net/my/myElement | Oui | |
my/myElement | http://example.net/my/myElement/ | Non | |
my/myElement[/] | http://example.net/my/myElement | Oui | |
my/myElement[/] | http://example.net/my/myElement/ | Oui | |
my/{hello}/{world} | http://example.net/my/myData1/myData2 | Oui | ["hello": "myData1", "world" : "myData2"] |
my/{level:[0-9]+} | http://example.net/my/myData1 | Non | |
my/{level:[0-9]+} | http://example.net/my/567 | Oui | ["level": "567"] |
Si une fonction est activable via plusieurs routes (alias), la propriété pattern
est dans ce cas répétée plusieurs
fois lors de la définition de la route.
Astuce
Le pattern peut être vide. Dans ce cas, la route n'est pas accessible depuis une url web. Elle reste cependant
accessible en ligne de commande via ank.php
ou via les tâches programmées.
# methods
La propriété methods
indique les méthodes HTTP qui sont acceptées pour activer la route. Les méthodes acceptées sont :
GET
, POST
, PUT
, DELETE
, OPTIONS
et PATCH
. Il est possible d'utiliser aussi le mot-clef ANY
pour indiquer
que toute méthode HTTP est acceptée.
# callable
La propriété callable
indique la fonction PHP à exécuter pour produire la réponse. Cette propriété peut indiquer une
méthode publique statique d'une classe ou une classe qui possède une méthode __invoke()
.
La propriété doit indiquer le nom de la fonction avec le namespace. Le fichier correspondant doit être dans le
répertoire vendor
en suivant les directives PSR4; un répertoire par partie de namespace. Exemple : My\Routes\Test
=>
vendor/My/Routes/Test.php
La méthode appelée doit avoir la signature suivante :
Dans le cas d'une méthode __invoke()
: callable = \My\Routes\Test
(fichier vendor/My/Routes/Test.php
)
namespace My\Routes;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class Test {
public function __invoke(
Request $request,
Response $response,
array $args
): Response
}
Dans le cas d'une méthode statique : callable = \My\Routes\Test::myRoute
(fichier vendor/My/Routes/Test.php
)
namespace My\Routes;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class Test {
public static function myRoute(
Request $request,
Response $response,
array $args
): Response
}
Cette méthode doit retourner une réponse dans tous les cas. En cas d'erreur, une exception de type
Anakeen\Router\Exception
peut être déclenchée. Les arguments de la méthode suivent la norme
PSR-7. La requête implémente l'interface Psr\Http\Message\RequestInterface
; la
réponse quant à elle, implémente l'interface Psr\Http\Message\ResponseInterface
.
L'argument $request
contient les informations relatives à la requête HTTP ayant activé la route. L'argument
$response
contient la réponse d'un éventuel middleware ayant été exécuté ou une réponse vierge si aucun middleware n'a
été exécuté.
Exemple : hello world : Retourne une donnée JSON avec {"hello" : "world"}
.
namespace My;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class HelloWorld
{
public function __invoke(Request $request, Response $response, array $args): Response
{
return $response->withJson([
"hello" => "world"
]);
}
}
# requiredAccess
La propriété requiredAccess
indique si la route nécessite un droit particulier pour être exécutée.
Voir Sécurité des routes
# priority
La priorité permet au routeur de choisir parmi plusieurs routes qui correspondent au pattern et à la method. La route choisie est celle dont la priorité est la plus élevée. Par défaut, la priorité d'une route est zéro.
La priorité peut être négative.
http://example.net/my/myFunction
Par exemple, les 3 pattern suivants correspondent à l'url : http://example.net/my/myFunction
- my/myFunction
- my/myFunction[/test/]
- my/myFunction[/]
Si les pattern ont la même priorité, c'est la longueur du pattern qui est pris en compte. Le pattern le plus long est choisi. Dans l'exemple ci-dessus, c'est la pattern n°2 qui est choisi.
# description
La description est un texte expliquant la nature de la fonction réalisée par la route. Cette description est visible dans les interfaces de développement des routes.
# authenticated
Permet d'indiquer que la connexion est authentifiée avant d'exécuter la route.
Voir Sécurité des routes