Yii2 framework backup
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

<?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);
}
}