Yaf 路由配置测试

来源:互联网 发布:ota产品数据分析 编辑:程序博客网 时间:2024/04/16 23:53

yaf路由组件有两个部分:路由器(Yaf_Router)和路由协议(Yaf_Route_Abstract)
路由协议事实上主要负责匹配我们预先定义好的路由协议,意思就是我们只有一个路由器,但我们可以有许多路由协议.路由器主要负责管理和运行路由链,它根据路由协议栈倒序依次调用各个路由协议, 一直到某一个路由协议返回成功以后,就匹配成功,路由的过程发生派遣过程的最开始,并且路由解析仅仅发生一次.路由过程在何控制器动作(Controller,Action)被派遣之前被执行,一旦路由成功,路由器将会把解析出得到的信息传递给请求对象(Yaf_Request_Abstractobject), 这些信息包括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
   ;可以定义默认的modulecontroller 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 = newYaf_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 ??

0 0