class MyUrlRule extends CBaseUrlRule { public function createUrl($manager,$route,$params,$ampersand) { return parent::createUrl($manager,$route,$params,$ampersand); // не применяем данное правило } public function parseUrl($manager,$request,$pathInfo,$rawPathInfo) { $uri = explode('/', $pathInfo); $level = count($uri); $parent_id = 0; if($level>0) { if(Yii::app()->hasModule($uri[0])) { $moduleUrl = array_shift($uri); $module = Yii::app()->getModule($module); if(isset($module->urlRules)) { $urlManager=Yii::app()->getUrlManager(); $urlManager->addRules($module->urlRules); } } if(in_array($uri[0],['bmw','mini','moto'])) { $mark = $uri[0]; Yii::app()->user->setState('mark',$mark); Yii::app()->params['mark'] = $mark; array_shift($uri); } else{ $mark = Yii::app()->user->getState('mark'); if(!$mark) $mark = 'bmw'; Yii::app()->getRequest()->redirect('/'.$mark.'/'.$pathInfo.'/'.($request->queryString ? '?'.$request->queryString : '')); } foreach($uri as $k=>$v) { $breadcrumbs[$k] = Rubrics::model()->find(array( 'condition'=>'parent_id=:parent_id and chpu=:chpu and status>=:status and mark=:mark and dealer_id IN (0,:dealerId)', 'params'=>[':chpu'=>$v, ':parent_id'=>$parent_id, ':status'=>1,':mark'=>$mark,':dealerId'=>Yii::app()->params['dealers'][Yii::app()->params['domain']]] )); if($breadcrumbs[$k]) { $rubric = $breadcrumbs[$k]; $parent_id = $rubric->id; $route = '/'.$rubric->ctype.'/rubric/id/'.$rubric->id; } elseif($k==count($uri)-1 && is_numeric($v)) { $obj_class = ucfirst($breadcrumbs[$k-1]->ctype); $model = new $obj_class; $model = $model->model()->find(array( 'condition'=>'id=:singleId and rubric_id=:rubricId', 'params'=>array(':singleId'=>$v, ':rubricId'=>$rubric->id) )); // $route = '/'.$rubric->ctype.'/single/id/'.$v; if($model) $route = '/'.$rubric->ctype.'/single/id/'.$model->id; else $route = '/'.$rubric->ctype.'/single/id/'.$v; // else // return '/site/error/code/404'; } else return '/site/error/code/404'; } Yii::app()->params['crumbs'] = $breadcrumbs; return $route; } else return '/site/error/code/404'; } } class MyUrlRule extends CBaseUrlRule { public function createUrl($manager,$route,$params,$ampersand) { return parent::createUrl($manager,$route,$params,$ampersand); // не применяем данное правило } public function parseUrl($manager,$request,$pathInfo,$rawPathInfo) { $uri = explode('/', $pathInfo); $level = count($uri); $parent_id = 0; if($level>0) { if(Yii::app()->hasModule($uri[0])) { $moduleUrl = array_shift($uri); $module = Yii::app()->getModule($module); if(isset($module->urlRules)) { $urlManager=Yii::app()->getUrlManager(); $urlManager->addRules($module->urlRules); } } if(in_array($uri[0],['bmw','mini','moto'])) { $mark = $uri[0]; Yii::app()->user->setState('mark',$mark); Yii::app()->params['mark'] = $mark; array_shift($uri); } else{ $mark = Yii::app()->user->getState('mark'); if(!$mark) $mark = 'bmw'; Yii::app()->getRequest()->redirect('/'.$mark.'/'.$pathInfo.'/'.($request->queryString ? '?'.$request->queryString : '')); } foreach($uri as $k=>$v) { $breadcrumbs[$k] = Rubrics::model()->find(array( 'condition'=>'parent_id=:parent_id and chpu=:chpu and status>=:status and mark=:mark and dealer_id IN (0,:dealerId)', 'params'=>[':chpu'=>$v, ':parent_id'=>$parent_id, ':status'=>1,':mark'=>$mark,':dealerId'=>Yii::app()->params['dealers'][Yii::app()->params['domain']]] )); if($breadcrumbs[$k]) { $rubric = $breadcrumbs[$k]; $parent_id = $rubric->id; $route = '/'.$rubric->ctype.'/rubric/id/'.$rubric->id; } elseif($k==count($uri)-1 && is_numeric($v)) { $obj_class = ucfirst($breadcrumbs[$k-1]->ctype); $model = new $obj_class; $model = $model->model()->find(array( 'condition'=>'id=:singleId and rubric_id=:rubricId', 'params'=>array(':singleId'=>$v, ':rubricId'=>$rubric->id) )); // $route = '/'.$rubric->ctype.'/single/id/'.$v; if($model) $route = '/'.$rubric->ctype.'/single/id/'.$model->id; else $route = '/'.$rubric->ctype.'/single/id/'.$v; // else // return '/site/error/code/404'; } else return '/site/error/code/404'; } Yii::app()->params['crumbs'] = $breadcrumbs; return $route; } else return '/site/error/code/404'; } }
/var/www/vhosts/bavaria.kz/framework/YiiBase.php(217)
205 elseif($n===4) 206 $object=new $type($args[1],$args[2],$args[3]); 207 else 208 { 209 unset($args[0]); 210 $class=new ReflectionClass($type); 211 // Note: ReflectionClass::newInstanceArgs() is available for PHP 5.1.3+ 212 // $object=$class->newInstanceArgs($args); 213 $object=call_user_func_array(array($class,'newInstance'),$args); 214 } 215 } 216 else 217 $object=new $type; 218 219 foreach($config as $key=>$value) 220 $object->$key=$value; 221 222 return $object; 223 } 224 225 /** 226 * Imports a class or a directory. 227 * 228 * Importing a class is like including the corresponding class file. 229 * The main difference is that importing a class is much lighter because it only
#0 |
+
–
/var/www/vhosts/bavaria.kz/framework/web/CUrlManager.php(366): YiiBase::createComponent() 361 $rawPathInfo=$request->getPathInfo(); 362 $pathInfo=$this->removeUrlSuffix($rawPathInfo,$this->urlSuffix); 363 foreach($this->_rules as $i=>$rule) 364 { 365 if(is_array($rule)) 366 $this->_rules[$i]=$rule=Yii::createComponent($rule); 367 if(($r=$rule->parseUrl($this,$request,$pathInfo,$rawPathInfo))!==false) 368 return isset($_GET[$this->routeVar]) ? $_GET[$this->routeVar] : $r; 369 } 370 if($this->useStrictParsing) 371 throw new CHttpException(404,Yii::t('yii','Unable to resolve the request "{route}".', |
#1 |
+
–
/var/www/vhosts/bavaria.kz/framework/web/CWebApplication.php(140): CUrlManager->parseUrl() 135 $route=$this->catchAllRequest[0]; 136 foreach(array_splice($this->catchAllRequest,1) as $name=>$value) 137 $_GET[$name]=$value; 138 } 139 else 140 $route=$this->getUrlManager()->parseUrl($this->getRequest()); 141 $this->runController($route); 142 } 143 144 /** 145 * Registers the core application components. |
#2 |
+
–
/var/www/vhosts/bavaria.kz/framework/base/CApplication.php(169): CWebApplication->processRequest() 164 public function run() 165 { 166 if($this->hasEventHandler('onBeginRequest')) 167 $this->onBeginRequest(new CEvent($this)); 168 register_shutdown_function(array($this,'end'),0,false); 169 $this->processRequest(); 170 if($this->hasEventHandler('onEndRequest')) 171 $this->onEndRequest(new CEvent($this)); 172 } 173 174 /** |
#3 |
+
–
/var/www/vhosts/bavaria.kz/dev.bavaria.kz/index.php(15): CApplication->run() 10 defined('YII_DEBUG') or define('YII_DEBUG',true); 11 // specify how many levels of call stack should be shown in each log message 12 defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3); 13 14 require_once($yii); 15 Yii::createWebApplication($config)->run(); |