* @author Qiang Xue * @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('%(.*?)%', '\1', $hint); $hint = preg_replace('/\s+/', ' ', $hint); return wordwrap($hint); } }