Maison  >  Article  >  développement back-end  >  Exemple de code de réécriture de routage Yaf du framework PHP

Exemple de code de réécriture de routage Yaf du framework PHP

小云云
小云云original
2018-02-12 11:37:312322parcourir

Habituellement, l'URL du site sera réécrite dans un souci de format d'URL convivial. Elle peut être réécrite dans la configuration du serveur web (Nginx) ou côté programme. Cet article présente principalement le framework PHP de réécriture de routage Yaf. vous. Laissez-moi vous donner une référence, j'espère que cela pourra vous aider.

Ce qui suit utilise le framework Yaf pour réécrire l'URL et prendre certaines dispositions pour une révision future

Les méthodes de réécriture d'URL de YAF incluent principalement les types suivants, qui peuvent être utilisés de manière exhaustive

Méthode 1 : Ajoutez la fonction d'initialisation dans Bootstrap.php après


;a rewrite route match request /product/*/*
routes.route_name.type="rewrite"
routes.route_name.match="/product/:name/:value"
routes.route_name.route.controller=product
routes.route_name.route.action=info

;a regex route match request /list/*/*
routes.route_name1.type="regex"
routes.route_name1.match="#^list/([^/]*)/([^/]*)#"
routes.route_name1.route.controller=Index
routes.route_name1.route.action=action
routes.route_name1.map.1=name
routes.route_name1.map.2=value

;a simple route match /**?c=controller&a=action&m=module
routes.route_name2.type="simple"
routes.route_name2.controller=c
routes.route_name2.module=m
routes.route_name2.action=a

;a simple router match /**?r=PATH_INFO
routes.route_name3.type="supervar"
routes.route_name3.varname=r

;a map route match any request to controller
routes.route_name4.type="map"
routes.route_name4.controllerPrefer=TRUE
routes.route_namer.delimiter="#!"

dans le fichier de configuration. Le nom de la fonction peut être choisi en fonction de votre. besoins. Il doit commencer par _ pour être appelé


<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
  public function _initConfig() {
    $config = Yaf_Application::app()->getConfig();
    Yaf_Registry::set("config", $config);
  }

  public function _initRoute(Yaf_Dispatcher $dispatcher) {
    $router = $dispatcher->getRouter();
    /**
     * we can add some pre-defined routes in application.ini
     */
    $router->addConfig(Yaf_Registry::get("config")->routes);
    /**
     * add a Rewrite route, then for a request uri: 
     * http://***/product/list/22/foo
     * will be matched by this route, and result:
     *
     * [module] => 
     * [controller] => product
     * [action] => info
     * [method] => GET
     * [params:protected] => Array
     *   (
     *     [id] => 22
     *     [name] => foo
     *   )
     * 
     */
    $route = new Yaf_Route_Rewrite(
      "/product/list/:id/:name",
      array(
        "controller" => "product",
        "action"   => "info",
      )
    ); 
    
    $router->addRoute(&#39;dummy&#39;, $route);
  }
?>

Méthode 2 : Directement dans le programme, configurer en mode tableau

Le les fonctions suivantes sont Placez-le dans Bootstrap.php


public function _initRoute(Ap_Dispatcher $dispatcher) {
  //在这里注册自己的路由协议,默认使用static路由
  $router = Ap_Dispatcher::getInstance()->getRouter();
  $routeConfig = array(
  $router = Ap_Dispatcher::getInstance()->getRouter();
  $routeConfig = array(
    "item" => array(
      "type" => "regex",
      "match" => "#^/(software|game)/(.*).html$#",
      "route" => array(&#39;action&#39; => &#39;item&#39;),
      "map" => array( 1 => &#39;data_type&#39;, 2 => &#39;docid&#39; ),
    ),
    //正则匹配
    "category" => array(
      "type" => "regex",
      "match" => "#^/(software|game|video)/(.*)/(list_(.*).html)?$#",
      "route" => array(&#39;action&#39; => &#39;list&#39; ),
      "map" => array( 1 => &#39;data_type&#39;, 2 => &#39;cid&#39;,4 => &#39;page_num&#39; ),
    ),
    //使用动态结果 :a 表示action
    "name" => array(
      "type" => "rewrite",    //Yaf_Route_Rewrite route
      "match" => "/user-list/:a/:id", //match only /user-list/开头的
      "route" => array(
        &#39;controller&#39; => "user", //route to user controller,
        &#39;action&#39;   => ":a", //使用动态的action
      ),
    ),
  );
  $router->addConfig(new Ap_Config_Simple($routeConfig));
}

Méthode 3 :


  /**
  * Add a rewrite route to Yaf_Router route stack
  */
  Yaf_Dispatcher::getInstance()->getRouter()->addRoute("name",
    new Yaf_Route_rewrite(
      "/product/:name/:id/*", //match request uri leading "/product"
      array(
        &#39;controller&#39; => "product", //route to product controller,
      ),
    )
  );

Recommandations associées :

Règles de configuration de routage yaf_Tutoriel PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn