详解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 cookies中删除的一般赋值方法
May 07 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
Dec 01 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 PHP
通过php修改xml文档内容的方法
Jan 23 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 PHP
PHP单态模式简单用法示例
Nov 16 PHP
PHP实现一个多功能购物网站的案例
Sep 13 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
使用ucenter实现多站点同步登录的讲解
Mar 21 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
改进的IP计数器
2006/10/09 PHP
PHP多文件上传实例
2015/07/09 PHP
简单实现php上传文件功能
2017/09/21 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
Python 如何对文件目录操作
2020/07/10 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
UNIX命令速查表
2012/03/10 面试题
学校运动会报道稿
2014/09/23 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
教师见习总结范文
2015/06/23 职场文书
公司车辆管理制度
2015/08/04 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android