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) { $lang = Yii::app()->user->getState('lang'); if(!$lang){ $lang = 'ru'; Yii::app()->user->setState('lang',$lang); Yii::app()->language = $lang; } $uri = explode('/', $pathInfo); $level = count($uri); $parent_id = 0; if(preg_match('(\w+)', $pathInfo, $matches)) { while(Yii::app()->hasModule($uri[0])) { $pre_route .= $uri[0].'/'; array_shift($uri); } foreach($uri as $k=>$v) { $crumbs[$k] = Rubrics::model()->find(array( 'condition'=>'parent_id=:parent_id and lang=:lang and chpu=:chpu and status>=:status and dealer_id=:dealerId', 'params'=>[':chpu'=>$v, ':parent_id'=>$parent_id, ':status'=>1, ':lang'=>$lang,':dealerId'=>Yii::app()->params['dealers'][Yii::app()->params['domain']]] )); if($crumbs[$k]) { $rubric = $crumbs[$k]; $parent_id = $rubric->id; $route = $rubric->ctype.'/rubric/id/'.$rubric->id; } elseif($k==count($uri)-1) { array_pop($crumbs); $obj_class = ucfirst($crumbs[$k-1]->ctype); if(class_exists($obj_class)) $modelClass = new $obj_class; else return '/site/error/code/404'; $model = $modelClass->model()->find(array( 'condition'=>'id=:singleId and rubric_id=:rubricId', 'params'=>array(':singleId'=>$v, ':rubricId'=>$rubric->id) )); if(!$model){ $model = $modelClass->model()->find([ 'condition'=>'name=:singleId and rubric_id=:rubricId', 'params'=>[':singleId'=>$v,':rubricId'=>$rubric->id] ]); } if($model) $route = $rubric->ctype.'/single/id/'.$model->id; else if($rubric->ctype=='catalog') $route = $rubric->ctype.'/single/id/'.$v; else return '/site/error/code/404'; } else return '/site/error/code/404'; } Yii::app()->params['crumbs'] = $crumbs; return $pre_route.$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) { $lang = Yii::app()->user->getState('lang'); if(!$lang){ $lang = 'ru'; Yii::app()->user->setState('lang',$lang); Yii::app()->language = $lang; } $uri = explode('/', $pathInfo); $level = count($uri); $parent_id = 0; if(preg_match('(\w+)', $pathInfo, $matches)) { while(Yii::app()->hasModule($uri[0])) { $pre_route .= $uri[0].'/'; array_shift($uri); } foreach($uri as $k=>$v) { $crumbs[$k] = Rubrics::model()->find(array( 'condition'=>'parent_id=:parent_id and lang=:lang and chpu=:chpu and status>=:status and dealer_id=:dealerId', 'params'=>[':chpu'=>$v, ':parent_id'=>$parent_id, ':status'=>1, ':lang'=>$lang,':dealerId'=>Yii::app()->params['dealers'][Yii::app()->params['domain']]] )); if($crumbs[$k]) { $rubric = $crumbs[$k]; $parent_id = $rubric->id; $route = $rubric->ctype.'/rubric/id/'.$rubric->id; } elseif($k==count($uri)-1) { array_pop($crumbs); $obj_class = ucfirst($crumbs[$k-1]->ctype); if(class_exists($obj_class)) $modelClass = new $obj_class; else return '/site/error/code/404'; $model = $modelClass->model()->find(array( 'condition'=>'id=:singleId and rubric_id=:rubricId', 'params'=>array(':singleId'=>$v, ':rubricId'=>$rubric->id) )); if(!$model){ $model = $modelClass->model()->find([ 'condition'=>'name=:singleId and rubric_id=:rubricId', 'params'=>[':singleId'=>$v,':rubricId'=>$rubric->id] ]); } if($model) $route = $rubric->ctype.'/single/id/'.$model->id; else if($rubric->ctype=='catalog') $route = $rubric->ctype.'/single/id/'.$v; else return '/site/error/code/404'; } else return '/site/error/code/404'; } Yii::app()->params['crumbs'] = $crumbs; return $pre_route.$route; } else return '/site/error/code/404'; } }
/var/www/vhosts/bavaria.kz/framework 1.14/YiiBase.php(224)
212 elseif($n===4) 213 $object=new $type($args[1],$args[2],$args[3]); 214 else 215 { 216 unset($args[0]); 217 $class=new ReflectionClass($type); 218 // Note: ReflectionClass::newInstanceArgs() is available for PHP 5.1.3+ 219 // $object=$class->newInstanceArgs($args); 220 $object=call_user_func_array(array($class,'newInstance'),$args); 221 } 222 } 223 else 224 $object=new $type; 225 226 foreach($config as $key=>$value) 227 $object->$key=$value; 228 229 return $object; 230 } 231 232 /** 233 * Imports a class or a directory. 234 * 235 * Importing a class is like including the corresponding class file. 236 * The main difference is that importing a class is much lighter because it only
#0 |
+
–
/var/www/vhosts/bavaria.kz/framework 1.14/web/CUrlManager.php(371): YiiBase::createComponent() 366 $rawPathInfo=$request->getPathInfo(); 367 $pathInfo=$this->removeUrlSuffix($rawPathInfo,$this->urlSuffix); 368 foreach($this->_rules as $i=>$rule) 369 { 370 if(is_array($rule)) 371 $this->_rules[$i]=$rule=Yii::createComponent($rule); 372 if(($r=$rule->parseUrl($this,$request,$pathInfo,$rawPathInfo))!==false) 373 return isset($_GET[$this->routeVar]) ? $_GET[$this->routeVar] : $r; 374 } 375 if($this->useStrictParsing) 376 throw new CHttpException(404,Yii::t('yii','Unable to resolve the request "{route}".', |
#1 |
+
–
/var/www/vhosts/bavaria.kz/framework 1.14/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 1.14/base/CApplication.php(185): CWebApplication->processRequest() 180 public function run() 181 { 182 if($this->hasEventHandler('onBeginRequest')) 183 $this->onBeginRequest(new CEvent($this)); 184 register_shutdown_function(array($this,'end'),0,false); 185 $this->processRequest(); 186 if($this->hasEventHandler('onEndRequest')) 187 $this->onEndRequest(new CEvent($this)); 188 } 189 190 /** |
#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(); |