123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- <?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 and backslashes.'),
- 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';
- }
- }
|