• 技术文章 >后端开发 >php教程

    php框架Yaf路由重写_php实例详解

    墨辰丷墨辰丷2018-05-21 13:40:14原创579
    本篇文章主要介绍php框架Yaf路由重写_php实例详解,感兴趣的朋友参考下,希望对大家有所帮助。

    通常为了友好的URL格式,会进行站点URL的重写,可以在webserver(Nginx)的配置中进行rewrite,也可在在程序端进行

    以下使用Yaf框架进行URL的重写,进行一些整理,方便日后查看

    YAF的URL重写方式主要有以下几种,可以综合使用

    方式1:在配置文件中进行

    ;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="#!"

    之后在Bootstrap.php中添加初始化函数,函数名可按自己需求取,必需以_开头才会被调用

    <?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('dummy', $route);
      }
    ?>

    方式2:直接在程序中,以数组方式配置

    以下函数是放在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('action' => 'item'),
          "map" => array( 1 => 'data_type', 2 => 'docid' ),
        ),
        //正则匹配
        "category" => array(
          "type" => "regex",
          "match" => "#^/(software|game|video)/(.*)/(list_(.*).html)?$#",
          "route" => array('action' => 'list' ),
          "map" => array( 1 => 'data_type', 2 => 'cid',4 => 'page_num' ),
        ),
        //使用动态结果 :a 表示action
        "name" => array(
          "type" => "rewrite",    //Yaf_Route_Rewrite route
          "match" => "/user-list/:a/:id", //match only /user-list/开头的
          "route" => array(
            'controller' => "user", //route to user controller,
            'action'   => ":a", //使用动态的action
          ),
        ),
      );
      $router->addConfig(new Ap_Config_Simple($routeConfig));
    }

    方式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(
            'controller' => "product", //route to product controller,
          ),
        )
      );

    相关推荐:

    PHP7.1内安装yaf扩展步骤详解

    Yaf框架安装指南

    PHP7.1安装yaf扩展的方法

    以上就是php框架Yaf路由重写_php实例详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 详解 实例
    上一篇:PHP基于ORM方式操作MySQL数据库的方法 下一篇:PHP实现计算两个时间差的方法
    千万级数据并发解决方案

    相关文章推荐

    • 100道常见PHP面试题(附解析),增强你的知识储备!• php 连接mssql数据库 初学php笔记_PHP• 一些使用频率比较高的php函数_PHP• PHP程序61条面向对象分析设计的经验小结_PHP• 常用的php对象类型判断_PHP
    1/1

    PHP中文网