详解php框架Yaf路由重写

发布时间 - 2026-01-11 01:58:32    点击率:

通常为了友好的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,
      ),
    )
  );

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Yaf框架路由重写  # php  # 路由重写  # ThinkPHP、Zend Framework2、Yaf、Laravel框架路由大比拼  # PHP扩展框架之Yaf框架的安装与使用  # PHP Yaf框架的简单安装使用教程(推荐)  # yii  # CI  # yaf框架+smarty模板使用方法  # 在PHP 7下安装Swoole与Yar  # Yaf的方法教程  # ubuntu14.04LTS安装nginx+mariaDB+php7+YAF的方法  # 基于yaf框架和uploadify插件  # 做的一个导入excel文件  # 查看并保存数据的功能  # PHP7.1安装yaf扩展的方法  # Ubuntu上安装yaf扩展的方法  # 详解Yaf框架PHPUnit集成测试方法  # Yaf框架封装的MySQL数据库操作示例  # 重写  # 自己的  # 在这里  # 放在  # 才会  # 也可  # 几种  # 可按  # 配置文件  # 大家多多  # 日后  # 路由协议  # 主要有  # simple  # PATH_INFO  # map  # amp  # module  # router  # extends 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Service Container和依赖注入?(代码示例)  高防服务器如何保障网站安全无虞?  历史网站制作软件,华为如何找回被删除的网站?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  Android 常见的图片加载框架详细介绍  常州企业网站制作公司,全国继续教育网怎么登录?  电商网站制作价格怎么算,网上拍卖流程以及规则?  使用spring连接及操作mongodb3.0实例  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  桂林网站制作公司有哪些,桂林马拉松怎么报名?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  Laravel如何为API编写文档_Laravel API文档生成与维护方法  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  如何制作一个表白网站视频,关于勇敢表白的小标题?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  EditPlus中的正则表达式实战(5)  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  详解jQuery中基本的动画方法  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  如何在IIS中配置站点IP、端口及主机头?  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  如何快速搭建安全的FTP站点?  如何快速搭建支持数据库操作的智能建站平台?  ,网页ppt怎么弄成自己的ppt?  在Oracle关闭情况下如何修改spfile的参数  php打包exe后无法访问网络共享_共享权限设置方法【教程】  canvas 画布在主流浏览器中的尺寸限制详细介绍  如何快速搭建个人网站并优化SEO?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  如何在建站之星网店版论坛获取技术支持?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  如何在橙子建站上传落地页?操作指南详解  如何彻底删除建站之星生成的Banner?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  如何用5美元大硬盘VPS安全高效搭建个人网站?  Laravel API资源类怎么用_Laravel API Resource数据转换  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  专业商城网站制作公司有哪些,pi商城官网是哪个?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Laravel如何创建自定义Facades?(详细步骤)