详解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
使用adodb lite解决问题
Dec 31 PHP
Zend framework处理一个http请求的流程分析
Feb 08 PHP
php IP转换整形(ip2long)的详解
Jun 06 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
Jun 21 PHP
php 数据结构之链表队列
Oct 17 PHP
php微信公众号开发之微信企业付款给个人
Oct 04 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 PHP
php libevent 功能与使用方法详解
Mar 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+MYSQL的文章管理系统(二)
2006/10/09 PHP
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
php常用正则函数实例小结
2016/12/29 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
vue监听input标签的value值方法
2018/08/27 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
Python高斯消除矩阵
2019/01/02 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
python 读写excel文件操作示例【附源码下载】
2019/06/19 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
Python request操作步骤及代码实例
2020/04/13 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
俄语地区最大的中国商品在线购物网站之一:Umka Mall
2019/11/03 全球购物
信息技术专业个人自我评价
2013/12/11 职场文书
求职信范文大全
2014/05/26 职场文书
庆六一活动总结
2014/08/29 职场文书
SQL中的三种去重方法小结
2021/11/01 SQL Server