| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| slam4:php:phalcon:routes [2015/01/11 19:31] – [1.3- Nommage des paramètres] jcheron | slam4:php:phalcon:routes [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 |
|---|
| * params : last et desc | * params : last et desc |
| |
| | |
| | Version courte avec paramètres nommés : |
| | |
| | <sxh php> |
| | <?php |
| | |
| | $router->add( |
| | "/news/{year:([0-9]{4})}/{month:([0-9]{2})}/{day:([0-9]{2})}/:params", |
| | array( |
| | "controller" => "posts", |
| | "action" => "show", |
| | "params" => 4 |
| | ) |
| | ); |
| | </sxh> |
| | |
| | ==== -- Récupération des paramètres nommés dans l'action cible ==== |
| | |
| | |
| | <sxh php;title:PostController.php> |
| | <?php |
| | |
| | class PostsController extends \Phalcon\Mvc\Controller{ |
| | |
| | public function indexAction(){ |
| | |
| | } |
| | |
| | public function showAction(){ |
| | |
| | // Return "year" parameter |
| | $year = $this->dispatcher->getParam("year"); |
| | |
| | // Return "month" parameter |
| | $month = $this->dispatcher->getParam("month"); |
| | |
| | // Return "day" parameter |
| | $day = $this->dispatcher->getParam("day"); |
| | |
| | } |
| | |
| | } |
| | </sxh> |
| | |
| | ==== -- Restrictions sur la méthode HTTP ==== |
| | |
| | La correspondance des routes peut également être réalisée sur la méthode HTTP (GET, POST, HEAD, PUT, DELETE...) : |
| | <sxh php> |
| | <?php |
| | |
| | // This route only will be matched if the HTTP method is GET |
| | $router->addGet("/products/edit/{id}", "Products::edit"); |
| | |
| | // This route only will be matched if the HTTP method is POST |
| | $router->addPost("/products/save", "Products::save"); |
| | |
| | // This route will be matched if the HTTP method is POST or PUT |
| | $router->add("/products/update")->via(array("POST", "PUT")); |
| | </sxh> |
| | |
| | ==== -- Fonctions de vérification ==== |
| | |
| | Les routes doivent parfois satisfaire des conditions bien spécifiques qu'il est possible d'inclure avec la méthode **beforeMatch** : si elle retourne false, la route sera considérée comme non correspondante : |
| | |
| | <sxh php> |
| | <?php |
| | |
| | $router->add('/login', array( |
| | 'module' => 'admin', |
| | 'controller' => 'session' |
| | ))->beforeMatch(function($uri, $route) { |
| | //Vérifie si la requête est réalisée en Ajax |
| | if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest') { |
| | return false; |
| | } |
| | return true; |
| | }); |
| | </sxh> |
| | ==== -- Groupes de routes ==== |
| | Si un ensemble de routes a des chemins identiques, il est possible de les regrouper pour les gérer plus facilement : |
| | <sxh php> |
| | <?php |
| | |
| | $router = new \Phalcon\Mvc\Router(); |
| | |
| | //Create a group with a common module and controller |
| | $blog = new \Phalcon\Mvc\Router\Group(array( |
| | 'module' => 'blog', |
| | 'controller' => 'index' |
| | )); |
| | |
| | //All the routes start with /blog |
| | $blog->setPrefix('/blog'); |
| | |
| | //Add a route to the group |
| | $blog->add('/save', array( |
| | 'action' => 'save' |
| | )); |
| | |
| | //Add another route to the group |
| | $blog->add('/edit/{id}', array( |
| | 'action' => 'edit' |
| | )); |
| | |
| | //This route maps to a controller different than the default |
| | $blog->add('/blog', array( |
| | 'controller' => 'blog', |
| | 'action' => 'index' |
| | )); |
| | |
| | //Add the group to the router |
| | $router->mount($blog); |
| | </sxh> |
| | |
| | ===== -- Configuration du routage ===== |
| | ==== -- Fonctionnement par défaut ==== |
| | La classe [[http://docs.phalconphp.com/en/latest/api/Phalcon_Mvc_Router.html|Phalcon\Mvc\Router]] a un fonctionnement par défaut offrant un routage simple fondé sur des URLs du type **/:controller/:action/:params** |
| | |
| | Il est possible de désactiver ce fonctionnement par défaut : |
| | |
| | <sxh php;gutter:false> |
| | <?php |
| | |
| | // Instanciation du routeur sans les routes par défaut |
| | $router = new \Phalcon\Mvc\Router(false); |
| | </sxh> |
| | |
| | === -- Route par défaut === |
| | <sxh php> |
| | <?php |
| | |
| | $router->add("/", array( |
| | 'controller' => 'index', |
| | 'action' => 'index' |
| | )); |
| | </sxh> |
| | |
| | === -- Chemins par défaut === |
| | <sxh php> |
| | <?php |
| | |
| | //Définition à partir des méthodes spécifiques |
| | $router->setDefaultModule('backend'); |
| | $router->setDefaultNamespace('Backend\Controllers'); |
| | $router->setDefaultController('index'); |
| | $router->setDefaultAction('index'); |
| | |
| | //Définition à partir d'un tableau |
| | $router->setDefaults(array( |
| | 'controller' => 'index', |
| | 'action' => 'index' |
| | )); |
| | </sxh> |
| | |
| | === -- Erreur 404 : not found path === |
| | |
| | <sxh php> |
| | <?php |
| | |
| | //Set 404 paths |
| | $router->notFound(array( |
| | "controller" => "index", |
| | "action" => "route404" |
| | )); |
| | </sxh> |
| ===== -- Initialisation du service routage ===== | ===== -- Initialisation du service routage ===== |
| L’initialisation du service routage se fait par injection de dépendance dans le fichier index.php ou services.php (si le projet a été créé avec webtools). | L’initialisation du service routage se fait par injection de dépendance dans le fichier index.php ou services.php (si le projet a été créé avec webtools). |