Yaf 路由配置测试

yaf路由组件有两个部分:路由器(Yaf_Router)和路由协议(Yaf_Route_Abstract)
路由协议事实上主要负责匹配我们预先定义好的路由协议,意思就是我们只有一个路由器,但我们可以有许多路由协议. 路由器主要负责管理和运行路由链,它根据路由协议栈倒序依次调用各个路由协议, 一直到某一个路由协议返回成功以后, 就匹配成功,路由的过程发生派遣过程的最开始,并且路由解析仅仅发生一次.路由过程在何控制器动作(Controller, Action)被派遣之前被执行,一旦路由成功,路由器将会把解析出得到的信息传递给请求对象(Yaf_Request_Abstract object), 这些信息包括moduel、controller、action、用户params等. 然后派遣器(Yaf_Dispatcher)就会按照这些信息派遣正确的控制器动作. 路由器也有插件钩子,就是routeStartup和routeShutdown,他们在路由解析前后分别被调用.(摘自 yaf手册)

 

目录结构如下:
.
├── application
│   ├── actions
│   │   └── Index.php
│   ├── Bootstrap.php
│   ├── cache
│   │   └── templates_c
│   ├── controllers
│   │   ├── Com.php
│   │   ├── Error.php
│   │   ├── Index.php
│   │   ├── Net.php
│   │   └── Person.php
│   ├── library
│   │   ├── Config
│   │   ├── Db
│   │   │   ├── Base.php
│   │   │   ├── MultiTable.php
│   │   │   └── Table.php
│   │   ├── Smarty
│   │   │   ├── Adapter.bak.php
│   │   │   ├── Adapter.php
│   │   │   ├── debug.tpl
│   │   │   ├── debug.tpl.bak
│   │   │   ├── plugins
│   │   │   ├── SmartyBC.class.php
│   │   │   ├── Smarty.class.php
│   │   │   └── sysplugins
│   │   └── Sys
│   │       ├── Box.php
│   │       ├── Controller
│   │       ├── Filter.php
│   │       ├── Fun.php
│   │       ├── Local.php
│   │       ├── Mailer.php
│   │       ├── Memcache.php
│   │       ├── Mongodb.php
│   │       ├── Phpmailerexception.php
│   │       ├── Rest.php
│   │       └── Smarty.php
│   ├── models
│   │   └── Gongchanginfo
│   │       ├── gccompany.php~
│   │       ├── Gccompany.php
│   │       └── Gccompany.php~
│   ├── modules
│   │   └── User
│   │       ├── controllers
│   │       └── views
│   ├── plugins
│   │   └── Sample.php
│   └── views
│       ├── debug.tpl
│       ├── extends.html
│       ├── index.html
│       └── index.html~
├── cache
│   └── df73b85a38d155c75edced0ea40953d7cfc85c87.index.html.php
├── cli.php
├── conf
│   └── application.ini
├── index.php
├── src
│   ├── log.png
│   └── scc.js
├── templates_c
利用LNMP进行的测试,域名为:wwww.yaf.cn
1:默认路由
 默认情况下,路由器是Yaf_Router,路由协议是Yaf_Route_Static,是基于HTTP路由的, 它期望一个请求是HTTP请求并且请求对象是使用Yaf_Request_Http
 而Yaf_Router负责分析请求中的request uri, 在去除掉base_uri以后, 得出目标模板, 控制器, 动作.获取到真正的负载路由信息的request_uri片段, 具体的策略是, 根据"/"对request_uri分段, 依次得到Module,Controller,Action, 在得到Module以后, 还需要根据Yaf_Application::$modules来判断Module是否是合法的Module, 如果不是, 则认为Module并没有体现在request_uri中, 而把原Module当做Controller, 原Controller当做Action:
 如果在配置文件application.ini的内容中为:
  [common]
   application.directory                 = APPLICATION_PATH"/application/"
   application.dispatcher.catchException = True ;出错的时候是否抛出异常
   application.dispatcher.catchException = True ;是否使用默认的异常捕捉
   application.cache_config              = 1
   application.view.ext                  = "html"
   application.modules                   = Index,User;声明存在的模块名

   ;application.library                   = local
   ;可以定义默认的module controller action
   application.dispatcher.defaultModule     = Index
   application.dispatcher.defaultController = Index
   application.dispatcher.defaultAction     = index
    
 如若访问:
  www.yaf.cn 会调用 /application/controllers/下面的Index.php(文件名第一个字母大写)中的indexAction ,不过你可以通过修改application.dispatcher.defaultAction来修改默认调用Action
  www.yaf.cn/user/index/index (必须保证user模块存在)解析的时候 发现user数模块名称index是控制器名称 index是Action名称就会调用 application/modules/User/下面的Index.php

2:Yaf_Route_Simple 路由
  
  public function __initRoute(Yaf_Dispatcher $dispatcher){
   //Yaf_Route_Simple 路由
   $routeArr = new Yaf_Route_Simple('m','c','a');
   $router->addRoute("name",$routeArr);
  }
  
  访问:www.yaf.cn/?m=user&c=account&a=add ( m 代表模块名称 c 代表控制器 a 代表Action  m、c、a是可以修改为任意的字符的)
3:Yaf_Route_Supervar
  Yaf_Route_Supervar和Yaf_Route_Simple相似, 都是在query string中获取路由信息, 不同的是, 它获取的是一个类似包含整个路由信息的request_uri
  
  public function __initRoute(Yaf_Dispatcher $dispatcher){
   //Yaf_Route_Supervar 路由
   $routeArr = new Yaf_Route_Supervar('r');
   $router->addRoute("name",$routeArr);
  }
 访问:http://www.yaf.cn/?r=/user/account/index
4:Yaf_Route_Regex 正则路由
 在application.ini 中加入:
  ;正则路由
  routes.regex_about.type             = "regex"
  routes.regex_about.match            = "#^/about.html$#"
  routes.regex_about.route.module     = User
  routes.regex_about.route.controller = Index
  routes.regex_about.route.action     = about
  routes.regex_about.map.1            = name
 访问:http://www.yaf.cn/about.html
5:Yaf_Route_Rewrite
 public function __initRoute(Yaf_Dispatcher $dispatcher){
   //创建一个路由协议实例
           $route = new Yaf_Route_Rewrite('product/:ident',array('module'=>'User','controller' => 'Index','action' => 'test'));
           //使用路由器装载路由协议
           $router->addRoute('product', $route);
  }

  访问:http://www.yaf.cn/product/34
6:Yaf_Route_Map ??

转载于:https://my.oschina.net/20130614/blog/158095

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值