You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
4.7 KiB
202 lines
4.7 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yii\gii\console; |
|
|
|
use Yii; |
|
use yii\base\InlineAction; |
|
use yii\console\Controller; |
|
|
|
/** |
|
* This is the command line version of Gii - a code generator. |
|
* |
|
* You can use this command to generate models, controllers, etc. For example, |
|
* to generate an ActiveRecord model based on a DB table, you can run: |
|
* |
|
* ``` |
|
* $ ./yii gii/model --tableName=city --modelClass=City |
|
* ``` |
|
* |
|
* @author Tobias Munk <schmunk@usrbin.de> |
|
* @author Qiang Xue <qiang.xue@gmail.com> |
|
* @since 2.0 |
|
*/ |
|
class GenerateController extends Controller |
|
{ |
|
/** |
|
* @var \yii\gii\Module |
|
*/ |
|
public $module; |
|
/** |
|
* @var boolean whether to generate all files and overwrite existing files |
|
*/ |
|
public $generate = false; |
|
/** |
|
* @var array a list of the available code generators |
|
*/ |
|
public $generators = []; |
|
|
|
/** |
|
* @var array generator option values |
|
*/ |
|
private $_options = []; |
|
|
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function __get($name) |
|
{ |
|
return isset($this->_options[$name]) ? $this->_options[$name] : null; |
|
} |
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function __set($name, $value) |
|
{ |
|
$this->_options[$name] = $value; |
|
} |
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function init() |
|
{ |
|
parent::init(); |
|
foreach ($this->generators as $id => $config) { |
|
$this->generators[$id] = Yii::createObject($config); |
|
} |
|
} |
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function createAction($id) |
|
{ |
|
/** @var $action GenerateAction */ |
|
$action = parent::createAction($id); |
|
foreach ($this->_options as $name => $value) { |
|
$action->generator->$name = $value; |
|
} |
|
return $action; |
|
} |
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function actions() |
|
{ |
|
$actions = []; |
|
foreach ($this->generators as $name => $generator) { |
|
$actions[$name] = [ |
|
'class' => 'yii\gii\console\GenerateAction', |
|
'generator' => $generator, |
|
]; |
|
} |
|
return $actions; |
|
} |
|
|
|
public function actionIndex() |
|
{ |
|
$this->run('/help', ['gii']); |
|
} |
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function getUniqueID() |
|
{ |
|
return $this->id; |
|
} |
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function options($id) |
|
{ |
|
if (isset($this->generators[$id])) { |
|
$attributes = $this->generators[$id]->attributes; |
|
unset($attributes['templates']); |
|
return array_merge( |
|
parent::options($id), |
|
array_keys($attributes) |
|
); |
|
} else { |
|
return parent::options($id); |
|
} |
|
} |
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function getActionHelpSummary($action) |
|
{ |
|
if ($action instanceof InlineAction) { |
|
return parent::getActionHelpSummary($action); |
|
} else { |
|
/** @var $action GenerateAction */ |
|
return $action->generator->getName(); |
|
} |
|
} |
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function getActionHelp($action) |
|
{ |
|
if ($action instanceof InlineAction) { |
|
return parent::getActionHelp($action); |
|
} else { |
|
/** @var $action GenerateAction */ |
|
$description = $action->generator->getDescription(); |
|
return wordwrap(preg_replace('/\s+/', ' ', $description)); |
|
} |
|
} |
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function getActionArgsHelp($action) |
|
{ |
|
return []; |
|
} |
|
|
|
/** |
|
* @inheritdoc |
|
*/ |
|
public function getActionOptionsHelp($action) |
|
{ |
|
if ($action instanceof InlineAction) { |
|
return parent::getActionOptionsHelp($action); |
|
} |
|
/** @var $action GenerateAction */ |
|
$attributes = $action->generator->attributes; |
|
unset($attributes['templates']); |
|
$hints = $action->generator->hints(); |
|
|
|
$options = []; |
|
foreach ($attributes as $name => $value) { |
|
$type = gettype($value); |
|
$options[$name] = [ |
|
'type' => $type === 'NULL' ? 'string' : $type, |
|
'required' => $value === null && $action->generator->isAttributeRequired($name), |
|
'default' => $value, |
|
'comment' => isset($hints[$name]) ? $this->formatHint($hints[$name]) : '', |
|
]; |
|
} |
|
|
|
return $options; |
|
} |
|
|
|
protected function formatHint($hint) |
|
{ |
|
$hint = preg_replace('%<code>(.*?)</code>%', '\1', $hint); |
|
$hint = preg_replace('/\s+/', ' ', $hint); |
|
return wordwrap($hint); |
|
} |
|
}
|
|
|