详解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超级全局变量
Jan 26 PHP
php 文章调用类代码
Aug 11 PHP
php 注释规范
Mar 29 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
phpnow php探针环境检测代码
Nov 04 PHP
php中动态调用函数的方法
Mar 16 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
2款PHP无限级分类实例代码
Nov 11 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
使用JavaScript创建新样式表和新样式规则
Jun 14 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 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 批量更新网页内容实现代码
2010/01/05 PHP
php替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
浅析js封装和作用域
2013/07/09 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
如何编写jquery插件
2017/03/29 jQuery
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
构建一个JavaScript插件系统
2020/10/20 Javascript
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
python文件的md5加密方法
2016/04/06 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
python小程序实现刷票功能详解
2019/07/17 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
美国电视购物:QVC
2017/02/06 全球购物
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
课程设计心得体会
2013/12/28 职场文书
教师考核材料
2014/05/21 职场文书
校园元旦活动总结
2014/07/09 职场文书
老兵退伍感言
2015/08/03 职场文书
python中print格式化输出的问题
2021/04/16 Python
pyqt5打包成exe可执行文件的方法
2021/05/14 Python
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技