详解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 相关文章推荐
第十一节 重载 [11]
Oct 09 PHP
php 数组的指针操作实现代码
Feb 08 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 PHP
php遍历数组的方法分享
Mar 22 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
百度ping方法使用示例 自动ping百度
Jan 26 PHP
php实例分享之二维数组排序
May 15 PHP
php遍历数组的4种方法总结
Jul 05 PHP
PHP中的表达式简述
May 29 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 16 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
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
使用jsonp完美解决跨域问题
2014/11/27 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
BootStrap selectpicker
2016/06/20 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
layui的select联动实现代码
2019/09/28 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
vue-video-player 断点续播的实现
2021/02/01 Vue.js
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
python模块常用用法实例详解
2019/10/17 Python
python manage.py runserver流程解析
2019/11/08 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
python 实现超级玛丽游戏
2020/11/25 Python
pandas实现导出数据的四种方式
2020/12/13 Python
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
促销活动总结
2014/04/28 职场文书
护校行动方案
2014/05/31 职场文书
大学计划书范文800字
2014/08/14 职场文书
学校工会工作总结2015
2015/05/19 职场文书
个人催款函范文
2015/06/24 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书
php访问对象中的成员的实例方法
2021/11/17 PHP
Python OpenCV实现图像模板匹配详解
2022/04/07 Python