Edward Posted November 14, 2012 Share Posted November 14, 2012 I found the code below interesting from class CWebApplication which extends CApplication this is the method in Yii that will create a controllerId from the URL and actionId if there is one. Its worth taking a look at. createController() method public array createController(string $route, CWebModule $owner=NULL) $route string the route of the request. $owner CWebModule the module that the new controller will belong to. Defaults to null, meaning the application instance is the owner. {return} array the controller instance and the action ID. Null if the controller class does not exist or the route is invalid. public function createController($route,$owner=null) { if($owner===null) $owner=$this; if(($route=trim($route,'/'))==='') $route=$owner->defaultController; $caseSensitive=$this->getUrlManager()->caseSensitive; $route.='/'; while(($pos=strpos($route,'/'))!==false) { $id=substr($route,0,$pos); if(!preg_match('/^\w+$/',$id)) return null; if(!$caseSensitive) $id=strtolower($id); $route=(string)substr($route,$pos+1); if(!isset($basePath)) // first segment { if(isset($owner->controllerMap[$id])) { return array( Yii::createComponent($owner->controllerMap[$id],$id,$owner===$this?null:$owner), $this->parseActionParams($route), ); } if(($module=$owner->getModule($id))!==null) return $this->createController($route,$module); $basePath=$owner->getControllerPath(); $controllerID=''; } else $controllerID.='/'; $className=ucfirst($id).'Controller'; $classFile=$basePath.DIRECTORY_SEPARATOR.$className.'.php'; if($owner->controllerNamespace!==null) $className=$owner->controllerNamespace.'\\'.$className; if(is_file($classFile)) { if(!class_exists($className,false)) require($classFile); if(class_exists($className,false) && is_subclass_of($className,'CController')) { $id[0]=strtolower($id[0]); return array( new $className($controllerID.$id,$owner===$this?null:$owner), $this->parseActionParams($route), ); } return null; } $controllerID.=$id; $basePath.=DIRECTORY_SEPARATOR.$id; } } Link to comment Share on other sites More sharing options...
Larry Posted November 14, 2012 Share Posted November 14, 2012 Thanks for sharing, Edward. Link to comment Share on other sites More sharing options...
Recommended Posts