Browse Source
根据vendor/blobt/generators/crud/创建vendor/linyao/generators/crud/的linyaocrud模板。删减update.php和create.php多余字样,修改view.php页面返回、修改、删除按钮样式。修改gii的linyaomodel模板,删除rules犯法里的创建时间和更新时间字段,使得根据gii的crud生成文件时,form表单不生成创建时间和更新时间字段。获取blobt最新文件夹并替换。
wechat_public_accounts
根据vendor/blobt/generators/crud/创建vendor/linyao/generators/crud/的linyaocrud模板。删减update.php和create.php多余字样,修改view.php页面返回、修改、删除按钮样式。修改gii的linyaomodel模板,删除rules犯法里的创建时间和更新时间字段,使得根据gii的crud生成文件时,form表单不生成创建时间和更新时间字段。获取blobt最新文件夹并替换。
wechat_public_accounts
linyao
5 years ago
17 changed files with 1508 additions and 4 deletions
-
3environments/skeleton/kcadmin/config/main-local.php
-
371vendor/blobt/generators/crud/Generator.php
-
2vendor/blobt/generators/crud/default/views/create.php
-
17vendor/blobt/generators/crud/form.php
-
555vendor/linyao/generators/crud/Generator.php
-
179vendor/linyao/generators/crud/default/controller.php
-
86vendor/linyao/generators/crud/default/search.php
-
42vendor/linyao/generators/crud/default/views/_form.php
-
45vendor/linyao/generators/crud/default/views/_search.php
-
27vendor/linyao/generators/crud/default/views/create.php
-
61vendor/linyao/generators/crud/default/views/index.php
-
38vendor/linyao/generators/crud/default/views/update.php
-
57vendor/linyao/generators/crud/default/views/view.php
-
17vendor/linyao/generators/crud/form.php
-
3vendor/linyao/generators/model/Generator.php
-
7vendor/linyao/generators/model/default/model.php
@ -0,0 +1,17 @@ |
|||||
|
<?php |
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $form yii\widgets\ActiveForm */ |
||||
|
/* @var $generator yii\gii\generators\crud\Generator */ |
||||
|
|
||||
|
echo $form->field($generator, 'modelClass'); |
||||
|
echo $form->field($generator, 'searchModelClass'); |
||||
|
echo $form->field($generator, 'controllerClass'); |
||||
|
echo $form->field($generator, 'viewPath'); |
||||
|
echo $form->field($generator, 'baseControllerClass'); |
||||
|
echo $form->field($generator, 'indexWidgetType')->dropDownList([ |
||||
|
'grid' => 'GridView', |
||||
|
'list' => 'ListView', |
||||
|
]); |
||||
|
echo $form->field($generator, 'enableI18N')->checkbox(); |
||||
|
echo $form->field($generator, 'enablePjax')->checkbox(); |
||||
|
echo $form->field($generator, 'messageCategory'); |
@ -0,0 +1,555 @@ |
|||||
|
<?php |
||||
|
|
||||
|
/* |
||||
|
* The MIT License |
||||
|
* |
||||
|
* Copyright 2019 Blobt. |
||||
|
* |
||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
* of this software and associated documentation files (the "Software"), to deal |
||||
|
* in the Software without restriction, including without limitation the rights |
||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
* copies of the Software, and to permit persons to whom the Software is |
||||
|
* furnished to do so, subject to the following conditions: |
||||
|
* |
||||
|
* The above copyright notice and this permission notice shall be included in |
||||
|
* all copies or substantial portions of the Software. |
||||
|
* |
||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
* THE SOFTWARE. |
||||
|
*/ |
||||
|
|
||||
|
namespace blobt\generators\crud; |
||||
|
|
||||
|
use Yii; |
||||
|
use yii\db\ActiveRecord; |
||||
|
use yii\db\BaseActiveRecord; |
||||
|
use yii\db\Schema; |
||||
|
use yii\gii\CodeFile; |
||||
|
use yii\helpers\Inflector; |
||||
|
use yii\helpers\VarDumper; |
||||
|
use yii\web\Controller; |
||||
|
|
||||
|
/** |
||||
|
* Description of Generator |
||||
|
* |
||||
|
* @author Blobt |
||||
|
* @email 380255922@qq.com |
||||
|
* @created Oct 6, 2019 |
||||
|
*/ |
||||
|
class Generator extends \yii\gii\Generator { |
||||
|
|
||||
|
public $modelClass; |
||||
|
public $controllerClass; |
||||
|
public $viewPath; |
||||
|
public $baseControllerClass = 'yii\web\Controller'; |
||||
|
public $indexWidgetType = 'grid'; |
||||
|
public $searchModelClass = ''; |
||||
|
|
||||
|
public $enablePjax = false; |
||||
|
public $strictInflector = true; |
||||
|
|
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function getName() { |
||||
|
return 'CRUD Generator'; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function getDescription() { |
||||
|
return 'This generator generates a controller and views that implement CRUD (Create, Read, Update, Delete) |
||||
|
operations for the specified data model.'; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function rules() { |
||||
|
return array_merge(parent::rules(), [ |
||||
|
[['controllerClass', 'modelClass', 'searchModelClass', 'baseControllerClass'], 'filter', 'filter' => 'trim'], |
||||
|
[['modelClass', 'controllerClass', 'baseControllerClass', 'indexWidgetType'], 'required'], |
||||
|
[['searchModelClass'], 'compare', 'compareAttribute' => 'modelClass', 'operator' => '!==', 'message' => 'Search Model Class must not be equal to Model Class.'], |
||||
|
[['modelClass', 'controllerClass', 'baseControllerClass', 'searchModelClass'], 'match', 'pattern' => '/^[\w\\\\]*$/', 'message' => 'Only word characters and backslashes are allowed.'], |
||||
|
[['modelClass'], 'validateClass', 'params' => ['extends' => BaseActiveRecord::className()]], |
||||
|
[['baseControllerClass'], 'validateClass', 'params' => ['extends' => Controller::className()]], |
||||
|
[['controllerClass'], 'match', 'pattern' => '/Controller$/', 'message' => 'Controller class name must be suffixed with "Controller".'], |
||||
|
[['controllerClass'], 'match', 'pattern' => '/(^|\\\\)[A-Z][^\\\\]+Controller$/', 'message' => 'Controller class name must start with an uppercase letter.'], |
||||
|
[['controllerClass', 'searchModelClass'], 'validateNewClass'], |
||||
|
[['indexWidgetType'], 'in', 'range' => ['grid', 'list']], |
||||
|
[['modelClass'], 'validateModelClass'], |
||||
|
[['enableI18N', 'enablePjax'], 'boolean'], |
||||
|
[['messageCategory'], 'validateMessageCategory', 'skipOnEmpty' => false], |
||||
|
['viewPath', 'safe'], |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function attributeLabels() { |
||||
|
return array_merge(parent::attributeLabels(), [ |
||||
|
'modelClass' => 'Model Class', |
||||
|
'controllerClass' => 'Controller Class', |
||||
|
'viewPath' => 'View Path', |
||||
|
'baseControllerClass' => 'Base Controller Class', |
||||
|
'indexWidgetType' => 'Widget Used in Index Page', |
||||
|
'searchModelClass' => 'Search Model Class', |
||||
|
'enablePjax' => 'Enable Pjax', |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function hints() { |
||||
|
return array_merge(parent::hints(), [ |
||||
|
'modelClass' => 'This is the ActiveRecord class associated with the table that CRUD will be built upon. |
||||
|
You should provide a fully qualified class name, e.g., <code>app\models\Post</code>.', |
||||
|
'controllerClass' => 'This is the name of the controller class to be generated. You should |
||||
|
provide a fully qualified namespaced class (e.g. <code>app\controllers\PostController</code>), |
||||
|
and class name should be in CamelCase with an uppercase first letter. Make sure the class |
||||
|
is using the same namespace as specified by your application\'s controllerNamespace property.', |
||||
|
'viewPath' => 'Specify the directory for storing the view scripts for the controller. You may use path alias here, e.g., |
||||
|
<code>/var/www/basic/controllers/views/post</code>, <code>@app/views/post</code>. If not set, it will default |
||||
|
to <code>@app/views/ControllerID</code>', |
||||
|
'baseControllerClass' => 'This is the class that the new CRUD controller class will extend from. |
||||
|
You should provide a fully qualified class name, e.g., <code>yii\web\Controller</code>.', |
||||
|
'indexWidgetType' => 'This is the widget type to be used in the index page to display list of the models. |
||||
|
You may choose either <code>GridView</code> or <code>ListView</code>', |
||||
|
'searchModelClass' => 'This is the name of the search model class to be generated. You should provide a fully |
||||
|
qualified namespaced class name, e.g., <code>app\models\PostSearch</code>.', |
||||
|
'enablePjax' => 'This indicates whether the generator should wrap the <code>GridView</code> or <code>ListView</code> |
||||
|
widget on the index page with <code>yii\widgets\Pjax</code> widget. Set this to <code>true</code> if you want to get |
||||
|
sorting, filtering and pagination without page refreshing.', |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function requiredTemplates() { |
||||
|
return ['controller.php']; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function stickyAttributes() { |
||||
|
return array_merge(parent::stickyAttributes(), ['baseControllerClass', 'indexWidgetType']); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Checks if model class is valid |
||||
|
*/ |
||||
|
public function validateModelClass() { |
||||
|
/* @var $class ActiveRecord */ |
||||
|
$class = $this->modelClass; |
||||
|
$pk = $class::primaryKey(); |
||||
|
if (empty($pk)) { |
||||
|
$this->addError('modelClass', "The table associated with $class must have primary key(s)."); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function generate() { |
||||
|
$controllerFile = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->controllerClass, '\\')) . '.php'); |
||||
|
|
||||
|
$files = [ |
||||
|
new CodeFile($controllerFile, $this->render('controller.php')), |
||||
|
]; |
||||
|
|
||||
|
if (!empty($this->searchModelClass)) { |
||||
|
$searchModel = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->searchModelClass, '\\') . '.php')); |
||||
|
$files[] = new CodeFile($searchModel, $this->render('search.php')); |
||||
|
} |
||||
|
|
||||
|
$viewPath = $this->getViewPath(); |
||||
|
$templatePath = $this->getTemplatePath() . '/views'; |
||||
|
foreach (scandir($templatePath) as $file) { |
||||
|
if (empty($this->searchModelClass) && $file === '_search.php') { |
||||
|
continue; |
||||
|
} |
||||
|
if (is_file($templatePath . '/' . $file) && pathinfo($file, PATHINFO_EXTENSION) === 'php') { |
||||
|
$files[] = new CodeFile("$viewPath/$file", $this->render("views/$file")); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return $files; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @return string the controller ID (without the module ID prefix) |
||||
|
*/ |
||||
|
public function getControllerID() { |
||||
|
$pos = strrpos($this->controllerClass, '\\'); |
||||
|
$class = substr(substr($this->controllerClass, $pos + 1), 0, -10); |
||||
|
|
||||
|
return Inflector::camel2id($class, '-', $this->strictInflector); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @return string the controller view path |
||||
|
*/ |
||||
|
public function getViewPath() { |
||||
|
if (empty($this->viewPath)) { |
||||
|
return Yii::getAlias('@app/views/' . $this->getControllerID()); |
||||
|
} |
||||
|
|
||||
|
return Yii::getAlias(str_replace('\\', '/', $this->viewPath)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @return string |
||||
|
*/ |
||||
|
public function getNameAttribute() { |
||||
|
foreach ($this->getColumnNames() as $name) { |
||||
|
if (!strcasecmp($name, 'name') || !strcasecmp($name, 'title')) { |
||||
|
return $name; |
||||
|
} |
||||
|
} |
||||
|
/* @var $class \yii\db\ActiveRecord */ |
||||
|
$class = $this->modelClass; |
||||
|
$pk = $class::primaryKey(); |
||||
|
|
||||
|
return $pk[0]; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Generates code for active field |
||||
|
* @param string $attribute |
||||
|
* @return string |
||||
|
*/ |
||||
|
public function generateActiveField($attribute) { |
||||
|
$tableSchema = $this->getTableSchema(); |
||||
|
if ($tableSchema === false || !isset($tableSchema->columns[$attribute])) { |
||||
|
if (preg_match('/^(password|pass|passwd|passcode)$/i', $attribute)) { |
||||
|
return "\$form->field(\$model, '$attribute')->passwordInput()"; |
||||
|
} |
||||
|
|
||||
|
return "\$form->field(\$model, '$attribute')"; |
||||
|
} |
||||
|
$column = $tableSchema->columns[$attribute]; |
||||
|
if ($column->phpType === 'boolean') { |
||||
|
return "\$form->field(\$model, '$attribute')->checkbox()"; |
||||
|
} |
||||
|
|
||||
|
if ($column->type === 'text') { |
||||
|
return "\$form->field(\$model, '$attribute')->textarea(['rows' => 6])"; |
||||
|
} |
||||
|
|
||||
|
if (preg_match('/^(password|pass|passwd|passcode)$/i', $column->name)) { |
||||
|
$input = 'passwordInput'; |
||||
|
} else { |
||||
|
$input = 'textInput'; |
||||
|
} |
||||
|
|
||||
|
if (is_array($column->enumValues) && count($column->enumValues) > 0) { |
||||
|
$dropDownOptions = []; |
||||
|
foreach ($column->enumValues as $enumValue) { |
||||
|
$dropDownOptions[$enumValue] = Inflector::humanize($enumValue); |
||||
|
} |
||||
|
return "\$form->field(\$model, '$attribute')->dropDownList(" |
||||
|
. preg_replace("/\n\s*/", ' ', VarDumper::export($dropDownOptions)) . ", ['prompt' => ''])"; |
||||
|
} |
||||
|
|
||||
|
if ($column->phpType !== 'string' || $column->size === null) { |
||||
|
return "\$form->field(\$model, '$attribute')->$input()"; |
||||
|
} |
||||
|
|
||||
|
return "\$form->field(\$model, '$attribute')->$input(['maxlength' => true])"; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Generates column format |
||||
|
* @param \yii\db\ColumnSchema $column |
||||
|
* @return string |
||||
|
*/ |
||||
|
public function generateColumnFormat($column) { |
||||
|
if ($column->phpType === 'boolean') { |
||||
|
return 'boolean'; |
||||
|
} |
||||
|
|
||||
|
if ($column->type === 'text') { |
||||
|
return 'ntext'; |
||||
|
} |
||||
|
|
||||
|
if (stripos($column->name, 'time') !== false && $column->phpType === 'integer') { |
||||
|
return 'datetime'; |
||||
|
} |
||||
|
|
||||
|
if (stripos($column->name, 'email') !== false) { |
||||
|
return 'email'; |
||||
|
} |
||||
|
|
||||
|
if (preg_match('/(\b|[_-])url(\b|[_-])/i', $column->name)) { |
||||
|
return 'url'; |
||||
|
} |
||||
|
|
||||
|
return 'text'; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Generates validation rules for the search model. |
||||
|
* @return array the generated validation rules |
||||
|
*/ |
||||
|
public function generateSearchRules() |
||||
|
{ |
||||
|
if (($table = $this->getTableSchema()) === false) { |
||||
|
return ["[['" . implode("', '", $this->getColumnNames()) . "'], 'safe']"]; |
||||
|
} |
||||
|
$types = []; |
||||
|
foreach ($table->columns as $column) { |
||||
|
switch ($column->type) { |
||||
|
case Schema::TYPE_TINYINT: |
||||
|
case Schema::TYPE_SMALLINT: |
||||
|
case Schema::TYPE_INTEGER: |
||||
|
case Schema::TYPE_BIGINT: |
||||
|
$types['integer'][] = $column->name; |
||||
|
break; |
||||
|
case Schema::TYPE_BOOLEAN: |
||||
|
$types['boolean'][] = $column->name; |
||||
|
break; |
||||
|
case Schema::TYPE_FLOAT: |
||||
|
case Schema::TYPE_DOUBLE: |
||||
|
case Schema::TYPE_DECIMAL: |
||||
|
case Schema::TYPE_MONEY: |
||||
|
$types['number'][] = $column->name; |
||||
|
break; |
||||
|
case Schema::TYPE_DATE: |
||||
|
case Schema::TYPE_TIME: |
||||
|
case Schema::TYPE_DATETIME: |
||||
|
case Schema::TYPE_TIMESTAMP: |
||||
|
default: |
||||
|
$types['safe'][] = $column->name; |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$rules = []; |
||||
|
foreach ($types as $type => $columns) { |
||||
|
$rules[] = "[['" . implode("', '", $columns) . "'], '$type']"; |
||||
|
} |
||||
|
|
||||
|
return $rules; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @return array searchable attributes |
||||
|
*/ |
||||
|
public function getSearchAttributes() |
||||
|
{ |
||||
|
return $this->getColumnNames(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Generates the attribute labels for the search model. |
||||
|
* @return array the generated attribute labels (name => label) |
||||
|
*/ |
||||
|
public function generateSearchLabels() |
||||
|
{ |
||||
|
/* @var $model \yii\base\Model */ |
||||
|
$model = new $this->modelClass(); |
||||
|
$attributeLabels = $model->attributeLabels(); |
||||
|
$labels = []; |
||||
|
foreach ($this->getColumnNames() as $name) { |
||||
|
if (isset($attributeLabels[$name])) { |
||||
|
$labels[$name] = $attributeLabels[$name]; |
||||
|
} else { |
||||
|
if (!strcasecmp($name, 'id')) { |
||||
|
$labels[$name] = 'ID'; |
||||
|
} else { |
||||
|
$label = Inflector::camel2words($name); |
||||
|
if (!empty($label) && substr_compare($label, ' id', -3, 3, true) === 0) { |
||||
|
$label = substr($label, 0, -3) . ' ID'; |
||||
|
} |
||||
|
$labels[$name] = $label; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return $labels; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Generates search conditions |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function generateSearchConditions() |
||||
|
{ |
||||
|
$columns = []; |
||||
|
if (($table = $this->getTableSchema()) === false) { |
||||
|
$class = $this->modelClass; |
||||
|
/* @var $model \yii\base\Model */ |
||||
|
$model = new $class(); |
||||
|
foreach ($model->attributes() as $attribute) { |
||||
|
$columns[$attribute] = 'unknown'; |
||||
|
} |
||||
|
} else { |
||||
|
foreach ($table->columns as $column) { |
||||
|
$columns[$column->name] = $column->type; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$likeConditions = []; |
||||
|
$hashConditions = []; |
||||
|
foreach ($columns as $column => $type) { |
||||
|
switch ($type) { |
||||
|
case Schema::TYPE_TINYINT: |
||||
|
case Schema::TYPE_SMALLINT: |
||||
|
case Schema::TYPE_INTEGER: |
||||
|
case Schema::TYPE_BIGINT: |
||||
|
case Schema::TYPE_BOOLEAN: |
||||
|
case Schema::TYPE_FLOAT: |
||||
|
case Schema::TYPE_DOUBLE: |
||||
|
case Schema::TYPE_DECIMAL: |
||||
|
case Schema::TYPE_MONEY: |
||||
|
case Schema::TYPE_DATE: |
||||
|
case Schema::TYPE_TIME: |
||||
|
case Schema::TYPE_DATETIME: |
||||
|
case Schema::TYPE_TIMESTAMP: |
||||
|
$hashConditions[] = "'{$column}' => \$this->{$column},"; |
||||
|
break; |
||||
|
default: |
||||
|
$likeKeyword = $this->getClassDbDriverName() === 'pgsql' ? 'ilike' : 'like'; |
||||
|
$likeConditions[] = "->andFilterWhere(['{$likeKeyword}', '{$column}', \$this->{$column}])"; |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$conditions = []; |
||||
|
if (!empty($hashConditions)) { |
||||
|
$conditions[] = "\$query->andFilterWhere([\n" |
||||
|
. str_repeat(' ', 12) . implode("\n" . str_repeat(' ', 12), $hashConditions) |
||||
|
. "\n" . str_repeat(' ', 8) . "]);\n"; |
||||
|
} |
||||
|
if (!empty($likeConditions)) { |
||||
|
$conditions[] = "\$query" . implode("\n" . str_repeat(' ', 12), $likeConditions) . ";\n"; |
||||
|
} |
||||
|
|
||||
|
return $conditions; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Generates URL parameters |
||||
|
* @return string |
||||
|
*/ |
||||
|
public function generateUrlParams() { |
||||
|
/* @var $class ActiveRecord */ |
||||
|
$class = $this->modelClass; |
||||
|
$pks = $class::primaryKey(); |
||||
|
if (count($pks) === 1) { |
||||
|
if (is_subclass_of($class, 'yii\mongodb\ActiveRecord')) { |
||||
|
return "'id' => (string)\$model->{$pks[0]}"; |
||||
|
} |
||||
|
|
||||
|
return "'id' => \$model->{$pks[0]}"; |
||||
|
} |
||||
|
|
||||
|
$params = []; |
||||
|
foreach ($pks as $pk) { |
||||
|
if (is_subclass_of($class, 'yii\mongodb\ActiveRecord')) { |
||||
|
$params[] = "'$pk' => (string)\$model->$pk"; |
||||
|
} else { |
||||
|
$params[] = "'$pk' => \$model->$pk"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return implode(', ', $params); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Generates action parameters |
||||
|
* @return string |
||||
|
*/ |
||||
|
public function generateActionParams() { |
||||
|
/* @var $class ActiveRecord */ |
||||
|
$class = $this->modelClass; |
||||
|
$pks = $class::primaryKey(); |
||||
|
if (count($pks) === 1) { |
||||
|
return '$id'; |
||||
|
} |
||||
|
|
||||
|
return '$' . implode(', $', $pks); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Generates parameter tags for phpdoc |
||||
|
* @return array parameter tags for phpdoc |
||||
|
*/ |
||||
|
public function generateActionParamComments() { |
||||
|
/* @var $class ActiveRecord */ |
||||
|
$class = $this->modelClass; |
||||
|
$pks = $class::primaryKey(); |
||||
|
if (($table = $this->getTableSchema()) === false) { |
||||
|
$params = []; |
||||
|
foreach ($pks as $pk) { |
||||
|
$params[] = '@param ' . (strtolower(substr($pk, -2)) === 'id' ? 'integer' : 'string') . ' $' . $pk; |
||||
|
} |
||||
|
|
||||
|
return $params; |
||||
|
} |
||||
|
if (count($pks) === 1) { |
||||
|
return ['@param ' . $table->columns[$pks[0]]->phpType . ' $id']; |
||||
|
} |
||||
|
|
||||
|
$params = []; |
||||
|
foreach ($pks as $pk) { |
||||
|
$params[] = '@param ' . $table->columns[$pk]->phpType . ' $' . $pk; |
||||
|
} |
||||
|
|
||||
|
return $params; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Returns table schema for current model class or false if it is not an active record |
||||
|
* @return bool|\yii\db\TableSchema |
||||
|
*/ |
||||
|
public function getTableSchema() { |
||||
|
/* @var $class ActiveRecord */ |
||||
|
$class = $this->modelClass; |
||||
|
if (is_subclass_of($class, 'yii\db\ActiveRecord')) { |
||||
|
return $class::getTableSchema(); |
||||
|
} |
||||
|
|
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @return array model column names |
||||
|
*/ |
||||
|
public function getColumnNames() { |
||||
|
/* @var $class ActiveRecord */ |
||||
|
$class = $this->modelClass; |
||||
|
if (is_subclass_of($class, 'yii\db\ActiveRecord')) { |
||||
|
return $class::getTableSchema()->getColumnNames(); |
||||
|
} |
||||
|
|
||||
|
/* @var $model \yii\base\Model */ |
||||
|
$model = new $class(); |
||||
|
|
||||
|
return $model->attributes(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @return string|null driver name of modelClass db connection. |
||||
|
* In case db is not instance of \yii\db\Connection null will be returned. |
||||
|
* @since 2.0.6 |
||||
|
*/ |
||||
|
protected function getClassDbDriverName() { |
||||
|
/* @var $class ActiveRecord */ |
||||
|
$class = $this->modelClass; |
||||
|
$db = $class::getDb(); |
||||
|
return $db instanceof \yii\db\Connection ? $db->driverName : null; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,179 @@ |
|||||
|
<?php |
||||
|
/** |
||||
|
* This is the template for generating a CRUD controller class file. |
||||
|
*/ |
||||
|
|
||||
|
use yii\db\ActiveRecordInterface; |
||||
|
use yii\helpers\StringHelper; |
||||
|
|
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $generator yii\gii\generators\crud\Generator */ |
||||
|
|
||||
|
$controllerClass = StringHelper::basename($generator->controllerClass); |
||||
|
$modelClass = StringHelper::basename($generator->modelClass); |
||||
|
$searchModelClass = StringHelper::basename($generator->searchModelClass); |
||||
|
if ($modelClass === $searchModelClass) { |
||||
|
$searchModelAlias = $searchModelClass . 'Search'; |
||||
|
} |
||||
|
|
||||
|
/* @var $class ActiveRecordInterface */ |
||||
|
$class = $generator->modelClass; |
||||
|
$pks = $class::primaryKey(); |
||||
|
$urlParams = $generator->generateUrlParams(); |
||||
|
$actionParams = $generator->generateActionParams(); |
||||
|
$actionParamComments = $generator->generateActionParamComments(); |
||||
|
|
||||
|
echo "<?php\n"; |
||||
|
?>
|
||||
|
|
||||
|
namespace <?= StringHelper::dirname(ltrim($generator->controllerClass, '\\')) ?>;
|
||||
|
|
||||
|
use Yii; |
||||
|
use <?= ltrim($generator->modelClass, '\\') ?>;
|
||||
|
<?php if (!empty($generator->searchModelClass)): ?>
|
||||
|
use <?= ltrim($generator->searchModelClass, '\\') . (isset($searchModelAlias) ? " as $searchModelAlias" : "") ?>;
|
||||
|
<?php else: ?>
|
||||
|
use yii\data\ActiveDataProvider; |
||||
|
<?php endif; ?>
|
||||
|
use <?= ltrim($generator->baseControllerClass, '\\') ?>;
|
||||
|
use yii\web\NotFoundHttpException; |
||||
|
use yii\filters\VerbFilter; |
||||
|
|
||||
|
/** |
||||
|
* <?= $controllerClass ?> implements the CRUD actions for <?= $modelClass ?> model.
|
||||
|
*/ |
||||
|
class <?= $controllerClass ?> extends <?= StringHelper::basename($generator->baseControllerClass) . "\n" ?>
|
||||
|
{ |
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function behaviors() |
||||
|
{ |
||||
|
return [ |
||||
|
'verbs' => [ |
||||
|
'class' => VerbFilter::className(), |
||||
|
'actions' => [ |
||||
|
'delete' => ['POST'], |
||||
|
], |
||||
|
], |
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Lists all <?= $modelClass ?> models.
|
||||
|
* @return mixed |
||||
|
*/ |
||||
|
public function actionIndex() |
||||
|
{ |
||||
|
<?php if (!empty($generator->searchModelClass)): ?>
|
||||
|
$searchModel = new <?= isset($searchModelAlias) ? $searchModelAlias : $searchModelClass ?>();
|
||||
|
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); |
||||
|
|
||||
|
return $this->render('index', [ |
||||
|
'searchModel' => $searchModel, |
||||
|
'dataProvider' => $dataProvider, |
||||
|
]); |
||||
|
<?php else: ?>
|
||||
|
$dataProvider = new ActiveDataProvider([ |
||||
|
'query' => <?= $modelClass ?>::find(),
|
||||
|
]); |
||||
|
|
||||
|
return $this->render('index', [ |
||||
|
'dataProvider' => $dataProvider, |
||||
|
]); |
||||
|
<?php endif; ?>
|
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Displays a single <?= $modelClass ?> model.
|
||||
|
* <?= implode("\n * ", $actionParamComments) . "\n" ?>
|
||||
|
* @return mixed |
||||
|
* @throws NotFoundHttpException if the model cannot be found |
||||
|
*/ |
||||
|
public function actionView(<?= $actionParams ?>)
|
||||
|
{ |
||||
|
return $this->render('view', [ |
||||
|
'model' => $this->findModel(<?= $actionParams ?>),
|
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Creates a new <?= $modelClass ?> model.
|
||||
|
* If creation is successful, the browser will be redirected to the 'view' page. |
||||
|
* @return mixed |
||||
|
*/ |
||||
|
public function actionCreate() |
||||
|
{ |
||||
|
$model = new <?= $modelClass ?>();
|
||||
|
|
||||
|
if ($model->load(Yii::$app->request->post()) && $model->save()) { |
||||
|
return $this->redirect(['view', <?= $urlParams ?>]);
|
||||
|
} |
||||
|
|
||||
|
return $this->render('create', [ |
||||
|
'model' => $model, |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Updates an existing <?= $modelClass ?> model.
|
||||
|
* If update is successful, the browser will be redirected to the 'view' page. |
||||
|
* <?= implode("\n * ", $actionParamComments) . "\n" ?>
|
||||
|
* @return mixed |
||||
|
* @throws NotFoundHttpException if the model cannot be found |
||||
|
*/ |
||||
|
public function actionUpdate(<?= $actionParams ?>)
|
||||
|
{ |
||||
|
$model = $this->findModel(<?= $actionParams ?>);
|
||||
|
|
||||
|
if ($model->load(Yii::$app->request->post()) && $model->save()) { |
||||
|
return $this->redirect(['view', <?= $urlParams ?>]);
|
||||
|
} |
||||
|
|
||||
|
return $this->render('update', [ |
||||
|
'model' => $model, |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Deletes an existing <?= $modelClass ?> model.
|
||||
|
* If deletion is successful, the browser will be redirected to the 'index' page. |
||||
|
* <?= implode("\n * ", $actionParamComments) . "\n" ?>
|
||||
|
* @return mixed |
||||
|
* @throws NotFoundHttpException if the model cannot be found |
||||
|
*/ |
||||
|
public function actionDelete(<?= $actionParams ?>)
|
||||
|
{ |
||||
|
$this->findModel(<?= $actionParams ?>)->delete();
|
||||
|
|
||||
|
return $this->redirect(['index']); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Finds the <?= $modelClass ?> model based on its primary key value.
|
||||
|
* If the model is not found, a 404 HTTP exception will be thrown. |
||||
|
* <?= implode("\n * ", $actionParamComments) . "\n" ?>
|
||||
|
* @return <?= $modelClass ?> the loaded model
|
||||
|
* @throws NotFoundHttpException if the model cannot be found |
||||
|
*/ |
||||
|
protected function findModel(<?= $actionParams ?>)
|
||||
|
{ |
||||
|
<?php |
||||
|
if (count($pks) === 1) { |
||||
|
$condition = '$id'; |
||||
|
} else { |
||||
|
$condition = []; |
||||
|
foreach ($pks as $pk) { |
||||
|
$condition[] = "'$pk' => \$$pk"; |
||||
|
} |
||||
|
$condition = '[' . implode(', ', $condition) . ']'; |
||||
|
} |
||||
|
?>
|
||||
|
if (($model = <?= $modelClass ?>::findOne(<?= $condition ?>)) !== null) {
|
||||
|
return $model; |
||||
|
} |
||||
|
|
||||
|
throw new NotFoundHttpException(<?= $generator->generateString('The requested page does not exist.') ?>);
|
||||
|
} |
||||
|
} |
@ -0,0 +1,86 @@ |
|||||
|
<?php |
||||
|
/** |
||||
|
* This is the template for generating CRUD search class of the specified model. |
||||
|
*/ |
||||
|
|
||||
|
use yii\helpers\StringHelper; |
||||
|
|
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $generator yii\gii\generators\crud\Generator */ |
||||
|
|
||||
|
$modelClass = StringHelper::basename($generator->modelClass); |
||||
|
$searchModelClass = StringHelper::basename($generator->searchModelClass); |
||||
|
if ($modelClass === $searchModelClass) { |
||||
|
$modelAlias = $modelClass . 'Model'; |
||||
|
} |
||||
|
$rules = $generator->generateSearchRules(); |
||||
|
$labels = $generator->generateSearchLabels(); |
||||
|
$searchAttributes = $generator->getSearchAttributes(); |
||||
|
$searchConditions = $generator->generateSearchConditions(); |
||||
|
|
||||
|
echo "<?php\n"; |
||||
|
?>
|
||||
|
|
||||
|
namespace <?= StringHelper::dirname(ltrim($generator->searchModelClass, '\\')) ?>;
|
||||
|
|
||||
|
use yii\base\Model; |
||||
|
use yii\data\ActiveDataProvider; |
||||
|
use <?= ltrim($generator->modelClass, '\\') . (isset($modelAlias) ? " as $modelAlias" : "") ?>;
|
||||
|
|
||||
|
/** |
||||
|
* <?= $searchModelClass ?> represents the model behind the search form of `<?= $generator->modelClass ?>`.
|
||||
|
*/ |
||||
|
class <?= $searchModelClass ?> extends <?= isset($modelAlias) ? $modelAlias : $modelClass ?>
|
||||
|
|
||||
|
{ |
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function rules() |
||||
|
{ |
||||
|
return [ |
||||
|
<?= implode(",\n ", $rules) ?>,
|
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function scenarios() |
||||
|
{ |
||||
|
// bypass scenarios() implementation in the parent class
|
||||
|
return Model::scenarios(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Creates data provider instance with search query applied |
||||
|
* |
||||
|
* @param array $params |
||||
|
* |
||||
|
* @return ActiveDataProvider |
||||
|
*/ |
||||
|
public function search($params) |
||||
|
{ |
||||
|
$query = <?= isset($modelAlias) ? $modelAlias : $modelClass ?>::find();
|
||||
|
|
||||
|
// add conditions that should always apply here
|
||||
|
|
||||
|
$dataProvider = new ActiveDataProvider([ |
||||
|
'query' => $query, |
||||
|
]); |
||||
|
|
||||
|
$this->load($params); |
||||
|
|
||||
|
if (!$this->validate()) { |
||||
|
// uncomment the following line if you do not want to return any records when validation fails
|
||||
|
// $query->where('0=1');
|
||||
|
return $dataProvider; |
||||
|
} |
||||
|
|
||||
|
// grid filtering conditions
|
||||
|
<?= implode("\n ", $searchConditions) ?>
|
||||
|
|
||||
|
return $dataProvider; |
||||
|
} |
||||
|
} |
@ -0,0 +1,42 @@ |
|||||
|
<?php |
||||
|
|
||||
|
use yii\helpers\Inflector; |
||||
|
use yii\helpers\StringHelper; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $generator yii\gii\generators\crud\Generator */ |
||||
|
|
||||
|
/* @var $model \yii\db\ActiveRecord */ |
||||
|
$model = new $generator->modelClass(); |
||||
|
$safeAttributes = $model->safeAttributes(); |
||||
|
if (empty($safeAttributes)) { |
||||
|
$safeAttributes = $model->attributes(); |
||||
|
} |
||||
|
|
||||
|
echo "<?php\n"; |
||||
|
?>
|
||||
|
|
||||
|
use yii\helpers\Html; |
||||
|
use yii\widgets\ActiveForm; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $model <?= ltrim($generator->modelClass, '\\') ?> */ |
||||
|
/* @var $form yii\widgets\ActiveForm */ |
||||
|
?>
|
||||
|
|
||||
|
<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-form"> |
||||
|
|
||||
|
<?= "<?php " ?>$form = ActiveForm::begin(); ?>
|
||||
|
|
||||
|
<?php foreach ($generator->getColumnNames() as $attribute) { |
||||
|
if (in_array($attribute, $safeAttributes)) { |
||||
|
echo " <?= " . $generator->generateActiveField($attribute) . " ?>\n\n"; |
||||
|
} |
||||
|
} ?>
|
||||
|
<div class="form-group"> |
||||
|
<?= "<?= " ?>Html::submitButton(<?= $generator->generateString('保存') ?>, ['class' => 'btn btn-success']) ?>
|
||||
|
</div> |
||||
|
|
||||
|
<?= "<?php " ?>ActiveForm::end(); ?>
|
||||
|
|
||||
|
</div> |
@ -0,0 +1,45 @@ |
|||||
|
<?php |
||||
|
|
||||
|
use yii\helpers\Inflector; |
||||
|
use yii\helpers\StringHelper; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $generator yii\gii\generators\crud\Generator */ |
||||
|
|
||||
|
echo "<?php\n"; |
||||
|
?>
|
||||
|
|
||||
|
use yii\helpers\Html; |
||||
|
use yii\widgets\ActiveForm; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $model <?= ltrim($generator->searchModelClass, '\\') ?> */ |
||||
|
/* @var $form yii\widgets\ActiveForm */ |
||||
|
?>
|
||||
|
|
||||
|
<?= "<?php " ?>$form = ActiveForm::begin([
|
||||
|
'action' => ['index'], |
||||
|
'method' => 'get', |
||||
|
'validateOnType' => true, |
||||
|
]); |
||||
|
?>
|
||||
|
<div class="col-sm-12"> |
||||
|
<div class="dataTables_filter"> |
||||
|
<?="<?= "?>$form->field($model, 'id', [
|
||||
|
"template" => "{input}{error}", |
||||
|
"inputOptions" => [ |
||||
|
"placeholder" => "检索ID", |
||||
|
"class" => "form-control", |
||||
|
], |
||||
|
"errorOptions" => [ |
||||
|
"class" => "error-tips" |
||||
|
] |
||||
|
]) |
||||
|
?>
|
||||
|
<div class="form-group"> |
||||
|
<?= "<?= " ?>Html::submitButton('<i class="fa fa-filter"></i>', ['class' => 'btn btn-default']) ?>
|
||||
|
<?= "<?= " ?>Html::resetButton('<i class="fa fa-eraser"></i>', ['class' => 'btn btn-default']) ?>
|
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<?= "<?php " ?>ActiveForm::end(); ?>
|
@ -0,0 +1,27 @@ |
|||||
|
<?php |
||||
|
|
||||
|
use yii\helpers\Inflector; |
||||
|
use yii\helpers\StringHelper; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $generator yii\gii\generators\crud\Generator */ |
||||
|
|
||||
|
echo "<?php\n"; |
||||
|
?>
|
||||
|
|
||||
|
use yii\helpers\Html; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $model <?= ltrim($generator->modelClass, '\\') ?> */ |
||||
|
|
||||
|
$this->title = <?= $generator->generateString('创建 ' . Inflector::camel2words(StringHelper::basename($generator->modelClass))) ?>;
|
||||
|
$this->params['breadcrumbs'][] = ['label' => <?= $generator->generateString(Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass)))) ?>, 'url' => ['index']];
|
||||
|
$this->params['breadcrumbs'][] = $this->title; |
||||
|
?>
|
||||
|
<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-create"> |
||||
|
|
||||
|
<?= "<?= " ?>$this->render('_form', [
|
||||
|
'model' => $model, |
||||
|
]) ?>
|
||||
|
|
||||
|
</div> |
@ -0,0 +1,61 @@ |
|||||
|
<?php |
||||
|
/* blobt */ |
||||
|
|
||||
|
use yii\helpers\Inflector; |
||||
|
use yii\helpers\StringHelper; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $generator yii\gii\generators\crud\Generator */ |
||||
|
|
||||
|
$urlParams = $generator->generateUrlParams(); |
||||
|
$nameAttribute = $generator->getNameAttribute(); |
||||
|
|
||||
|
echo "<?php\n"; |
||||
|
?>
|
||||
|
|
||||
|
use yii\helpers\Html; |
||||
|
use blobt\grid\GridView; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
<?= !empty($generator->searchModelClass) ? "/* @var \$searchModel " . ltrim($generator->searchModelClass, '\\') . " */\n" : '' ?>
|
||||
|
/* @var $dataProvider yii\data\ActiveDataProvider */ |
||||
|
|
||||
|
$this->title = <?= $generator->generateString(Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass)))) ?>;
|
||||
|
$this->params['breadcrumbs'][] = $this->title; |
||||
|
?>
|
||||
|
<div class="row"> |
||||
|
<div class="col-xs-12"> |
||||
|
<?= "<?= " ?>GridView::widget([
|
||||
|
'dataProvider' => $dataProvider, |
||||
|
'filter' => $this->render("_search", ['model' => $searchModel]), |
||||
|
'batch' => [ |
||||
|
[ |
||||
|
"label" => "删除", |
||||
|
"url" => "<?=$generator->controllerID?>/deletes" |
||||
|
], |
||||
|
], |
||||
|
'columns' => [ |
||||
|
[ |
||||
|
'class' => 'blobt\grid\CheckboxColumn', |
||||
|
'width' => '2%', |
||||
|
'align' => 'center' |
||||
|
], |
||||
|
<?php |
||||
|
$count = 0; |
||||
|
foreach ($generator->getColumnNames() as $name) { |
||||
|
if (++$count < 6) { |
||||
|
echo " '" . $name . "',\n"; |
||||
|
} else { |
||||
|
echo " //'" . $name . "',\n"; |
||||
|
} |
||||
|
} |
||||
|
?>
|
||||
|
[ |
||||
|
'class' => 'blobt\grid\ActionColumn', |
||||
|
'align' => 'center' |
||||
|
], |
||||
|
] |
||||
|
]); |
||||
|
<?= "?>" ?>
|
||||
|
</div> |
||||
|
</div> |
@ -0,0 +1,38 @@ |
|||||
|
<?php |
||||
|
|
||||
|
use yii\helpers\Inflector; |
||||
|
use yii\helpers\StringHelper; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $generator yii\gii\generators\crud\Generator */ |
||||
|
|
||||
|
$urlParams = $generator->generateUrlParams(); |
||||
|
$modelClassName = Inflector::camel2words(StringHelper::basename($generator->modelClass)); |
||||
|
$nameAttributeTemplate = '$model->' . $generator->getNameAttribute(); |
||||
|
$titleTemplate = $generator->generateString('Update ' . $modelClassName . ': {name}', ['name' => '{nameAttribute}']); |
||||
|
if ($generator->enableI18N) { |
||||
|
$title = strtr($titleTemplate, ['\'{nameAttribute}\'' => $nameAttributeTemplate]); |
||||
|
} else { |
||||
|
$title = strtr($titleTemplate, ['{nameAttribute}\'' => '\' . ' . $nameAttributeTemplate]); |
||||
|
} |
||||
|
|
||||
|
echo "<?php\n"; |
||||
|
?>
|
||||
|
|
||||
|
use yii\helpers\Html; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $model <?= ltrim($generator->modelClass, '\\') ?> */ |
||||
|
|
||||
|
$this->title = <?= $title ?>;
|
||||
|
$this->params['breadcrumbs'][] = ['label' => <?= $generator->generateString(Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass)))) ?>, 'url' => ['index']];
|
||||
|
$this->params['breadcrumbs'][] = ['label' => $model-><?= $generator->getNameAttribute() ?>, 'url' => ['view', <?= $urlParams ?>]];
|
||||
|
$this->params['breadcrumbs'][] = <?= $generator->generateString('Update ') ?>;
|
||||
|
?>
|
||||
|
<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-update"> |
||||
|
|
||||
|
<?= '<?= ' ?>$this->render('_form', [
|
||||
|
'model' => $model, |
||||
|
]) ?>
|
||||
|
|
||||
|
</div> |
@ -0,0 +1,57 @@ |
|||||
|
<?php |
||||
|
|
||||
|
use yii\helpers\Inflector; |
||||
|
use yii\helpers\StringHelper; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $generator yii\gii\generators\crud\Generator */ |
||||
|
|
||||
|
$urlParams = $generator->generateUrlParams(); |
||||
|
|
||||
|
echo "<?php\n"; |
||||
|
?>
|
||||
|
|
||||
|
use yii\helpers\Html; |
||||
|
use yii\widgets\DetailView; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $model <?= ltrim($generator->modelClass, '\\') ?> */ |
||||
|
|
||||
|
$this->title = $model-><?= $generator->getNameAttribute() ?>;
|
||||
|
$this->params['breadcrumbs'][] = ['label' => <?= $generator->generateString(Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass)))) ?>, 'url' => ['index']];
|
||||
|
$this->params['breadcrumbs'][] = $this->title; |
||||
|
\yii\web\YiiAsset::register($this); |
||||
|
?>
|
||||
|
<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-view"> |
||||
|
|
||||
|
<p> |
||||
|
<?= "<?= " ?>Html::a(<?= $generator->generateString('返回列表') ?>, ['index'], ['class' => 'btn btn-success']) ?>
|
||||
|
<?= "<?= " ?>Html::a(<?= $generator->generateString('编辑') ?>, ['update', <?= $urlParams ?>], ['class' => 'btn btn-primary']) ?>
|
||||
|
<?= "<?= " ?>Html::a(<?= $generator->generateString('删除') ?>, ['delete', <?= $urlParams ?>], [
|
||||
|
'class' => 'btn btn-danger', |
||||
|
'data' => [ |
||||
|
'confirm' => <?= $generator->generateString('确定要删除该条记录吗?') ?>,
|
||||
|
'method' => 'post', |
||||
|
], |
||||
|
]) ?>
|
||||
|
</p> |
||||
|
|
||||
|
<?= "<?= " ?>DetailView::widget([
|
||||
|
'model' => $model, |
||||
|
'attributes' => [ |
||||
|
<?php |
||||
|
if (($tableSchema = $generator->getTableSchema()) === false) { |
||||
|
foreach ($generator->getColumnNames() as $name) { |
||||
|
echo " '" . $name . "',\n"; |
||||
|
} |
||||
|
} else { |
||||
|
foreach ($generator->getTableSchema()->columns as $column) { |
||||
|
$format = $generator->generateColumnFormat($column); |
||||
|
echo " '" . $column->name . ($format === 'text' ? "" : ":" . $format) . "',\n"; |
||||
|
} |
||||
|
} |
||||
|
?>
|
||||
|
], |
||||
|
]) ?>
|
||||
|
|
||||
|
</div> |
@ -0,0 +1,17 @@ |
|||||
|
<?php |
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $form yii\widgets\ActiveForm */ |
||||
|
/* @var $generator yii\gii\generators\crud\Generator */ |
||||
|
|
||||
|
echo $form->field($generator, 'modelClass'); |
||||
|
echo $form->field($generator, 'searchModelClass'); |
||||
|
echo $form->field($generator, 'controllerClass'); |
||||
|
echo $form->field($generator, 'viewPath'); |
||||
|
echo $form->field($generator, 'baseControllerClass'); |
||||
|
echo $form->field($generator, 'indexWidgetType')->dropDownList([ |
||||
|
'grid' => 'GridView', |
||||
|
'list' => 'ListView', |
||||
|
]); |
||||
|
echo $form->field($generator, 'enableI18N')->checkbox(); |
||||
|
echo $form->field($generator, 'enablePjax')->checkbox(); |
||||
|
echo $form->field($generator, 'messageCategory'); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue