详解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 相关文章推荐
建立文件交换功能的脚本(一)
Oct 09 PHP
PHP 判断常量,变量和函数是否存在
Apr 26 PHP
ajax php 实现写入数据库
Sep 02 PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
Nov 01 PHP
注册页面之前先验证用户名是否存在的php代码
Jul 14 PHP
php判断GIF图片是否为动画的方法
Sep 04 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 PHP
php实现的递归提成方案实例
Nov 14 PHP
php数据访问之增删改查操作
May 09 PHP
Laravel5.7 数据库操作迁移的实现方法
Apr 12 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防止跨域提交表单
2013/11/01 PHP
PHP多态代码实例
2015/06/26 PHP
PHP面向对象详解(三)
2015/12/07 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
Angular中$compile源码分析
2016/01/28 Javascript
教你如何终止JQUERY的$.AJAX请求
2016/02/23 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
应届生财务会计求职信
2013/11/05 职场文书
初中校园之声广播稿
2014/01/15 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
公司文体活动总结
2015/05/07 职场文书
python绘制箱型图
2021/04/27 Python
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python