详解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&amp;&amp;mysql)六
Oct 09 PHP
我的论坛源代码(一)
Oct 09 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
php模拟post上传图片实现代码
Jun 24 PHP
PHP+Ajax实现验证码的实时验证
Jul 20 PHP
php源码 fsockopen获取网页内容实例详解
Sep 24 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 PHP
php生成word并下载代码实例
Mar 15 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 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
乱谈我对耳机、音箱的感受
2021/03/02 无线电
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
JavaScript中的其他对象
2008/01/16 Javascript
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
python自动生成证件号的方法示例
2021/01/14 Python
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
艺术系应届生的自我评价
2013/10/19 职场文书
酒店管理自荐信
2013/10/23 职场文书
商务英语本科生的自我评价分享
2013/11/15 职场文书
聊城大学毕业生自荐书
2014/02/01 职场文书
期末评语大全
2014/05/04 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书