webtoolsnz/yii2-giiant

为Yii 2框架的Gii CRUD生成器

安装数: 42,855

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 16

分支: 0

开放问题: 0

类型:yii2-extension

0.3.0 2023-05-30 21:14 UTC

README

项目是从https://github.com/schmunk42/yii2-giiant分叉而来

为Gii,Yii2框架的代码生成器提供扩展模型和CRUD

它是什么?

Giiant提供支持关系和复杂UI的模型和CRUD生成模板。主要项目目标是把从gtc, giix, awecrud和其他项目中提取的许多功能和经验整合到一个解决方案中。

安装

安装此扩展的首选方式是通过composer。更新你的composer.json文件如下

"require-dev": {
    "webtoolsnz/yii2-giiant" : "dev-master"
},
"repositories": [
    {
        "type": "composer",
        "url": "http://packages.webtools.nz"
    }
]

如果启用了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生成器的动作按钮类选项中选择“App类”选项以进行自定义)
  • 使用提供者队列自定义输入、属性、列和关系
  • 回调提供者可以通过依赖注入注入任何类型的代码以供输入、属性和列使用

提供者

  • CallbackProvider:通用的提供者,可以修改任何输入、属性或列,具有高度灵活的回调函数
  • RelationProvider:渲染关系代码(例如,链接、下拉列表)
  • EditorProvider:渲染RTE,例如Ckeditor作为输入小部件
  • DateTimeProvider:渲染日期输入
  • OptsProvider:如果模型包含optsColumnName()方法,则渲染填充的下拉列表。

使用提供者进行自定义

在许多情况下,您可能希望用自定义版本替换某些输入,例如编辑器、文件上传或选择器、具有模态屏幕的复杂输入小部件、通过AJAX获取数据等等。

使用Giiant提供者,您可以创建一个实例队列,这些实例可以提供根据更复杂的规则提供的自定义代码。请查看一些现有的giiant提供者

配置提供者,将以下内容添加到您的提供者列表中

\webtoolsnz\giiant\crud\providers\EditorProvider,
\webtoolsnz\giiant\crud\providers\SelectProvider,
\webtoolsnz\giiant\crud\providers\OptsProvider,

并配置提供者的设置,通过依赖注入将设置添加到您的应用程序配置中,例如在console/config/bootstrap.php

\Yii::$container->set(
    'webtoolsnz\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)
    */
   'common\models\Foo.isAvailable' => function ($attribute, $generator) {
       $data = \yii\helpers\VarDumper::export([0 => 'Nein', 1 => 'Ja']);
       return <<<INPUT
\$form->field(\$model, '{$attribute}')->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进行模型更新和迁移的详细说明,请参阅此处

特别感谢motinthyseusuldisnrcoelho对他们的工作、灵感和反馈。

故障排除

您还可以添加

"repositories": [
  {
    "type": "vcs",
    "url": "https://github.com/schmunk42/yii2-giiant.git"
  }
],
"require": {
    .....(your required modules)....
    "schmunk42/yii2-giiant":"dev-master"
},

到您的*** composer.json ***文件,并运行

composer update

如果您在使用首选方法时遇到"未找到"错误,请运行。