diff options
Diffstat (limited to 'framework/gii/generators/controller/ControllerCode.php')
| -rw-r--r-- | framework/gii/generators/controller/ControllerCode.php | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/framework/gii/generators/controller/ControllerCode.php b/framework/gii/generators/controller/ControllerCode.php new file mode 100644 index 0000000..6cdc9fd --- /dev/null +++ b/framework/gii/generators/controller/ControllerCode.php @@ -0,0 +1,130 @@ +<?php + +class ControllerCode extends CCodeModel +{ + public $controller; + public $baseClass='Controller'; + public $actions='index'; + + public function rules() + { + return array_merge(parent::rules(), array( + array('controller, actions, baseClass', 'filter', 'filter'=>'trim'), + array('controller, baseClass', 'required'), + array('controller', 'match', 'pattern'=>'/^\w+[\w+\\/]*$/', 'message'=>'{attribute} should only contain word characters and slashes.'), + array('actions', 'match', 'pattern'=>'/^\w+[\w\s,]*$/', 'message'=>'{attribute} should only contain word characters, spaces and commas.'), + array('baseClass', 'match', 'pattern'=>'/^[a-zA-Z_]\w*$/', 'message'=>'{attribute} should only contain word characters.'), + array('baseClass', 'validateReservedWord', 'skipOnError'=>true), + array('baseClass, actions', 'sticky'), + )); + } + + public function attributeLabels() + { + return array_merge(parent::attributeLabels(), array( + 'baseClass'=>'Base Class', + 'controller'=>'Controller ID', + 'actions'=>'Action IDs', + )); + } + + public function requiredTemplates() + { + return array( + 'controller.php', + 'view.php', + ); + } + + public function successMessage() + { + $link=CHtml::link('try it now', Yii::app()->createUrl($this->controller), array('target'=>'_blank')); + return "The controller has been generated successfully. You may $link."; + } + + public function prepare() + { + $this->files=array(); + $templatePath=$this->templatePath; + + $this->files[]=new CCodeFile( + $this->controllerFile, + $this->render($templatePath.'/controller.php') + ); + + foreach($this->getActionIDs() as $action) + { + $this->files[]=new CCodeFile( + $this->getViewFile($action), + $this->render($templatePath.'/view.php', array('action'=>$action)) + ); + } + } + + public function getActionIDs() + { + $actions=preg_split('/[\s,]+/',$this->actions,-1,PREG_SPLIT_NO_EMPTY); + $actions=array_unique($actions); + sort($actions); + return $actions; + } + + public function getControllerClass() + { + if(($pos=strrpos($this->controller,'/'))!==false) + return ucfirst(substr($this->controller,$pos+1)).'Controller'; + else + return ucfirst($this->controller).'Controller'; + } + + public function getModule() + { + if(($pos=strpos($this->controller,'/'))!==false) + { + $id=substr($this->controller,0,$pos); + if(($module=Yii::app()->getModule($id))!==null) + return $module; + } + return Yii::app(); + } + + public function getControllerID() + { + if($this->getModule()!==Yii::app()) + $id=substr($this->controller,strpos($this->controller,'/')+1); + else + $id=$this->controller; + if(($pos=strrpos($id,'/'))!==false) + $id[$pos+1]=strtolower($id[$pos+1]); + else + $id[0]=strtolower($id[0]); + return $id; + } + + public function getUniqueControllerID() + { + $id=$this->controller; + if(($pos=strrpos($id,'/'))!==false) + $id[$pos+1]=strtolower($id[$pos+1]); + else + $id[0]=strtolower($id[0]); + return $id; + } + + public function getControllerFile() + { + $module=$this->getModule(); + $id=$this->getControllerID(); + if(($pos=strrpos($id,'/'))!==false) + $id[$pos+1]=strtoupper($id[$pos+1]); + else + $id[0]=strtoupper($id[0]); + return $module->getControllerPath().'/'.$id.'Controller.php'; + } + + public function getViewFile($action) + { + $module=$this->getModule(); + return $module->getViewPath().'/'.$this->getControllerID().'/'.$action.'.php'; + } +}
\ No newline at end of file |
