详解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 编写的日历
Oct 09 PHP
模仿OSO的论坛(三)
Oct 09 PHP
Php获取金书网的书名的实现代码
Jun 11 PHP
基于php下载文件的详解
Jun 02 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
php中session使用示例
Mar 29 PHP
Yii2中使用join、joinwith多表关联查询
Jun 30 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
php微信开发之自定义菜单实现
Nov 18 PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 PHP
stripos函数知识点实例分享
Feb 11 PHP
php实现微信小程序授权登录功能(实现流程)
Nov 13 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
使用eAccelerator加密PHP程序
2008/10/03 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
php变量作用域的深入解析
2013/06/03 PHP
解析php类的注册与自动加载
2013/07/05 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
Python中私有属性的定义方式
2020/03/05 Python
Python实现简单的2048小游戏
2021/03/01 Python
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
家长给孩子的表扬信
2014/01/17 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
重阳节慰问信
2015/02/15 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript