【Yii】url路由

以创建url路由为例,从CWebApplication执行请求过程说起,如果在配置中设置了catchAllRequest,所有请求将会定位到配置中的路由中,否则的需要CUrlManager的parseUrl()方法解析解析url获取路由。
[php]  view plain copy
  1. /** 
  2.  * Parses the user request. 
  3.  * @param CHttpRequest $request the request application component 
  4.  * @return string the route (controllerID/actionID) and perhaps GET parameters in path format. 
  5.  */  
  6. public function parseUrl($request)  
  7. {  
  8.     if($this->getUrlFormat()===self::PATH_FORMAT)  
  9.     {  
  10.         $rawPathInfo=$request->getPathInfo();  
  11.         $pathInfo=$this->removeUrlSuffix($rawPathInfo,$this->urlSuffix);  
  12.         foreach($this->_rules as $i=>$rule)  
  13.         {  
  14.             if(is_array($rule))  
  15.                 $this->_rules[$i]=$rule=Yii::createComponent($rule);  
  16.             if(($r=$rule->parseUrl($this,$request,$pathInfo,$rawPathInfo))!==false)  
  17.                 return isset($_GET[$this->routeVar]) ? $_GET[$this->routeVar] : $r;  
  18.         }  
  19.         if($this->useStrictParsing)  
  20.             throw new CHttpException(404,Yii::t('yii','Unable to resolve the request "{route}".',  
  21.                 array('{route}'=>$pathInfo)));  
  22.         else  
  23.             return $pathInfo;  
  24.     }  
  25.     else if(isset($_GET[$this->routeVar]))  
  26.         return $_GET[$this->routeVar];  
  27.     else if(isset($_POST[$this->routeVar]))  
  28.         return $_POST[$this->routeVar];  
  29.     else  
  30.         return '';  
  31. }  

CUrlManager初始化的时候如果url格式(默认是get格式)如果是path格式,则通过配置中的rule数组创建路由规则对象,根据路由规则获取内部路由,当路由都不匹配的时候会根据设置的useStrictParsing参数决定抛出一个404错误合适返回$pathinfo。如果不是path格式的话,会通过$_GET或者$_POST返回r后面的参数作为路由。


关与path路由的获取和创建,YII社区中两幅图分析的很详细


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值