详解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下利用header()函数设置浏览器缓存的代码
Sep 01 PHP
PHP学习 变量使用总结
Mar 24 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
Nov 02 PHP
php通过COM类调用组件的实现代码
Jan 11 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
Zend的AutoLoad机制介绍
Sep 27 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 PHP
PHP获取网页标题的3种实现方法代码实例
Apr 11 PHP
php生成圆角图片的方法
Apr 07 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
Aug 17 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 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网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
js实现跨域访问的三种方法
2015/12/09 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
详解VUE 数组更新
2017/12/16 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python实现一个简单的MySQL类
2015/01/07 Python
5种Python单例模式的实现方式
2016/01/14 Python
常用python编程模板汇总
2016/02/12 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
原装进口全世界:天猫国际
2016/08/03 全球购物
linux面试题参考答案(5)
2014/09/01 面试题
幼儿园长自我鉴定
2013/10/17 职场文书
应届大学生求职信
2013/12/01 职场文书
会计实训报告范文
2014/11/04 职场文书
文艺节目主持词
2015/07/06 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
python 自动刷新网页的两种方法
2021/04/20 Python
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
golang 实用库gotable的具体使用
2021/07/01 Golang