详解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 静态页面中显示动态内容
Aug 14 PHP
PHP Memcached + APC + 文件缓存封装实现代码
Mar 11 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
浅析51个PHP处理字符串的函数
Aug 02 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
php强大的时间转换函数strtotime
Feb 18 PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 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
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
JavaScript 学习初步 入门教程
2010/03/25 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
处理Python中的URLError异常的方法
2015/04/30 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
python for 循环获取index索引的方法
2019/02/01 Python
Python:Numpy 求平均向量的实例
2019/06/29 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
10张动图学会python循环与递归问题
2021/02/06 Python
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
新年联欢会主持词
2014/03/27 职场文书
商务经理岗位职责
2014/07/30 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python