# 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

  1. my/myFunction
  2. my/myFunction[/test/]
  3. 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