详解php框架Yaf路由重写


Posted in PHP onJune 20, 2017

通常为了友好的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 相关文章推荐
PHP数据缓存技术
Feb 14 PHP
PHP日期时间函数的高级应用技巧
May 16 PHP
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
PHP使用数组实现队列
Feb 05 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
php使用CURL伪造IP和来源实例详解
Jan 15 PHP
php把大写命名转换成下划线分割命名
Apr 27 PHP
php简单图像创建入门实例
Jun 10 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
PHP中关键字interface和implements详解
Jun 14 PHP
php中文乱码问题的终极解决方案汇总
Aug 01 PHP
phpStudy 2016 使用教程详解(支持PHP7)
Oct 18 PHP
PHP简单计算两个时间差的方法示例
Jun 20 #PHP
php实现的错误处理封装类实例
Jun 20 #PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 #PHP
php实现的双色球算法示例
Jun 20 #PHP
php实现的二分查找算法示例
Jun 20 #PHP
创建无限极分类树型结构的简单方法
Jun 20 #PHP
PHP实现的简单排列组合算法应用示例
Jun 20 #PHP
You might like
下载文件的点击数回填
2006/10/09 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
详解angular2.x创建项目入门指令
2018/10/11 Javascript
JavaScript的词法结构精华篇
2018/10/17 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
从零学Python之引用和类属性的初步理解
2014/05/15 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
项目投资合作意向书
2014/07/29 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
交通事故案件代理词
2015/05/23 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
Spring实现内置监听器
2021/07/09 Java/Android
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫