H2 - P2019

Développement web

Cours 35 - 2016-05-23

Silex

Routing

  • Une route correspond au chemin vers une destination
  • La méthode $app->get() permet de définir une route
  • Le premier paramètre correspond au chemin
  • Le deuxième paramètre correspond à la fonction à executer

Routes simples


$app->get('/hello', function () {
    return 'Hello!';
});
                    
  • Le chemin est /hello
  • La fonction à executer renvoie Hello!
  • La page va donc simplement afficher Hello! (pas de HTML)

Il est possible de créer n'importe quelle route

  • /
  • /category
  • /category/films
  • /category/films/articles/3
  • /contact
  • ...

Routes dynamiques

  • Parfois, nous avons besoin qu'une partie du chemin puisse varier
  • Exemple : page/1, page/2, page/3
  • Le routing de Silex permet de gérer ça très simplement sans avoir à écrire chacune des valeurs possibles

$app->get('/page/{number}', function ($number) {
    return 'Page number : '.$number;
});
                    
  • Le partie qui peut varier doit être entre crochet {} dans le chemin
  • Il faut ensuite l'indiquer dans le paramètre de la fonction (avec le $) en gardant le même nom
  • Et on peut ensuite l'utiliser dans la fonction
  • Il est bien sûr possible de spécifier des routes avec plusieurs paramètres

$app->get('/hello/{first_name}-{last_name}', function($first_name,$last_name) {
    return 'Hello '.$first_name.' '.$last_name;
});
                    

Routes dynamiques contraintes


$app->get('/page/{number}', function ($number) {
    return 'Page number : '.$number;
})
->assert('number', '\d+');
                    
  • Le premier paramètre est la variable ciblée
  • Le deuxième paramètre est une regex permettant de valider la valeur
  • La méthode s'applique directement après la méthode ->get() (notez la position du ;)

Les regex classiques

  • \w+ : un mot
  • \d+ : un nombre
  • [a-z0-9_-]+ : un slug

Routes dynamiques avec valeur par défault

  • Il est possible d'indiquer une valeur par défaut

$app->get('/page/{number}', function ($number) {
    return 'Page number : '.$number;
})
->assert('number', '\d+')
->value('number', '1');
                    
  • Le premier paramètre est la variable ciblée
  • Le deuxième paramètre est la valeur par défaut
  • Notez la position du ;
  • La route est accessible avec le chemin /page et $number vaudra 1 par défaut

Ordre des routes

  • L'ordre des routes a son importance
    
    // Route 1
    $app->get('/hello/{name}', function($name) {
        return 'Route 1';
    });
    
    // Route 2
    $app->get('/hello/tata', function() {
        return 'Route 2';
    });
                                
  • La première route qui "match" la requête sera utilisée
  • Dans l'exemple suivant, la deuxième route ne sera jamais utilisée car la première est prioritaire

Routes nommées

  • Il est possible de donner un nom aux routes
    
            $app->get('/page/{number}', function ($number) {
                return 'Page number : '.$number;
            })
            ->assert('number', '\d+')
            ->value('number', '1')
            ->bind('page');
                                
  • Servira par la suite à créer les URLs facilement