zolotarev / yii2-giiant
为 Yii 2 框架的 Gii CRUD 生成器
Requires
- dmstr/yii2-bootstrap: *
- yiisoft/yii2: ~2.0.4
- yiisoft/yii2-gii: ~2.0.4
This package is not auto-updated.
Last update: 2024-09-28 18:15:58 UTC
README
为 Gii,Yii2 框架的代码生成器,提供扩展模型和 CRUD
项目处于测试阶段!
这是什么?
Giiant 提供了模型和 CRUD 生成模板,支持关系并具有复杂的用户界面。主要项目目标是把从 gtc、giix、awecrud 等其他解决方案中学习到的许多功能和经验集成到一个解决方案中。
安装
通过 composer 安装此扩展是首选方式。
composer.phar require schmunk42/yii2-giiant:"*"
如果启用了 Gii 模块,生成器将在应用程序启动过程中自动注册。
使用方法
访问您应用程序的 Gii(例如,index.php?r=gii
),然后在主菜单屏幕中选择一个生成器。
有关基本使用说明,请参阅 Yii2 指南中的 Gii 部分。
命令行批处理
您可以使用内置的批处理命令运行基础模型和 CRUD 生成批处理。
./yii giiant-batch --tables=profile,social_account,user,token
它将处理给定的表,更多详情请参阅 ./yii help giiant-batch
。请参阅 Sakila 示例 以获取详细示例。
特性
模型生成器
- 生成单独的模型类以进行自定义和基于模型的类以重新生成
- 可以从模型类名称中删除表前缀(不绑定到数据库连接设置)
CRUD 生成器
- 可以自定义模型、视图和控制器位置以使用子文件夹
- 水平和垂直表单布局
- 操作按钮类自定义(在 CRUD 生成器的“操作按钮类”选项中选择“应用程序类”选项进行自定义)
- 使用提供者队列对输入、属性、列和关系进行自定义
- 回调提供者通过依赖注入将任何类型的代码注入输入、属性和列
提供者
- 回调提供者通用的提供者,可以高度灵活地使用回调函数修改任何输入、属性或列
- 关系提供者渲染关系代码(例如,链接、下拉列表)
- 编辑器提供者渲染富文本编辑器,例如
Ckeditor
作为输入小部件 - 日期时间提供者渲染日期输入
- 选项提供者如果模型包含
optsColumnName()
方法,则渲染填充的下拉列表。
使用提供者进行自定义
在许多情况下,您可能想要交换,例如,某些输入与您项目中的自定义版本。此用例的示例包括编辑器、文件上传或选择器、具有模态屏幕的复杂输入小部件、通过 AJAX 获取数据等。
使用 Giiant 提供者,您可以创建一个实例队列,这些实例可以提供基于更复杂规则的定制代码。请查看一些现有的 giiant 提供者。
配置提供者,将以下内容添加到提供者列表中
\schmunk42\giiant\crud\providers\EditorProvider,
\schmunk42\giiant\crud\providers\SelectProvider,
\schmunk42\giiant\crud\providers\OptsProvider,
并配置提供者的设置,通过依赖注入添加设置到您的应用程序配置中,例如在 console/config/bootstrap.php
中
\Yii::$container->set(
'schmunk42\giiant\crud\providers\EditorProvider',
[
'columnNames' => ['description']
]
);
这将为每个名为 description
的列渲染 Ckeditor 小部件。
<?= $form->field($model, 'description')->widget(
\dosamigos\ckeditor\CKEditor::className(),
[
'options' => ['rows' => 6],
'preset' => 'basic'
]) ?>
注意 OptsProvider 会将每个模型的字段与 opts 方法进行匹配,即方法 optsMembers
与模型属性 members
匹配。
在下拉列表中使用 "提示"
在您的 getColumnName()
方法中将第一个条目设置为值 null
。
null => \Yii::t('app', 'Select'),
为确保将正确的值写入数据库,您应该在模型中添加验证规则。
public function rules()
{
return ArrayHelper::merge(
parent::rules(),
[
[
['field_name'],
'default',
'value' => null
]
]
);
}
通用 CallbackProvider
此提供程序有三个属性 activeFields
(表单)、columnFormats
(索引)和 attributeFormats
(视图),它们都接受一个回调数组作为输入。键作为正则表达式进行评估,以匹配类和属性名称。而回调函数则接受当前属性和生成器作为输入参数。
配置可以通过 Yii2 的依赖注入容器来完成。
在 _form
视图中定义输入字段的回调
$activeFields = [
/**
* Generate a checkbox for specific column (model attribute)
*/
'models\\\\Foo.isAvailable' => function ($attribute, $generator) {
$data = \yii\helpers\VarDumper::export([0 => 'Nein', 1 => 'Ja']);
return <<<INPUT
\$form->field(\$model, '{$attribute->name}')->checkbox({$data});
INPUT;
},
];
在 index
视图中定义网格列的回调
columnFormats = [
// generate custom HTML in column
'common\models\Foo.html' => function ($attribute, $generator) {
return <<<FORMAT
[
'format' => 'html',
'label'=>'FOOFOO',
'attribute' => 'item_id',
'value'=> function(\$model){
return \yii\helpers\Html::a(\$model->bar,['/crud/item/view', 'id' => \$model->link_id]);
}
]
FORMAT;
},
// hide all text fields in grid
'.+' => function ($column, $model) {
if ($column->dbType == 'text') {
return false;
}
},
// hide system fields in grid
'created_at$|updated_at$' => function () {
return false;
},
];
详细 view
属性
$attributeFormats = [
// usa a static helper function for all columns ending with `_json`
'_json$' => function ($attribute, $generator) {
$formattter = StringFormatter::className();
return <<<FORMAT
[
'format' => 'html',
#'label'=>'FOOFOO',
'attribute' => '{$attribute->name}',
'value'=> {$formattter}::contentJsonToHtml(\$model->{$attribute->name})
]
FORMAT;
},
];
最后,通过 DI 容器添加配置
\Yii::$container->set(
'schmunk42\giiant\crud\providers\CallbackProvider',
[
'activeFields' => $activeFields,
'columnFormats' => $columnFormats,
'attributeFormats' => $attributeFormats,
]
);
使用自定义生成器、模型和 CRUD 模板
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
'allowedIPs' => ['127.0.0.1'],
'generators' => [
// generator name
'giiant-model' => [
//generator class
'class' => 'schmunk42\giiant\model\Generator',
//setting for out templates
'templates' => [
// template name => path to template
'mymodel' =>
'@app/giiTemplates/model/default',
]
]
],
];
附加信息
有关如何使用 MySQL Workbench 进行模型更新和迁移的详细说明,请参阅此处。
特别感谢 motin、thyseus、uldisn 和 rcoelho 对他们的工作、灵感和反馈的贡献。
故障排除
您还可以添加
"repositories": [
{
"type": "vcs",
"url": "https://github.com/schmunk42/yii2-giiant.git"
}
],
"require": {
.....(your required modules)....
"schmunk42/yii2-giiant":"dev-master"
},
到您的 *** composer.json *** 文件中,并运行
composer update
如果您在使用首选方法时遇到 "未找到" 错误。