zoukankan      html  css  js  c++  java
  • php框架Yaf路由重写

    php框架Yaf路由重写

    通常为了友好的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,
               ),
            )
        );
    
  • 相关阅读:
    php之static静态变量详解
    设计模式【代理模式】
    小牟Andorid下面MD5具体实现的思路总结
    ubuntu14.04安装MySQL
    Android手机定位技术的发展
    我不同意你,这是您的支持
    我要遵守11文章数据库设计指南
    quick-cocos2d-x游戏开发【3】——display.newSprite创建向导
    第二章 自己的框架WMTS服务,下载数据集成的文章1
    JSTL实现int数据的类型的长度
  • 原文地址:https://www.cnblogs.com/coolworld/p/5429854.html
Copyright © 2011-2022 走看看