zolotarev/yii2-giiant

为 Yii 2 框架的 Gii CRUD 生成器

安装次数: 2

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 120

开放问题: 0

类型:yii2-extension

0.4.1 2015-07-01 00:29 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 进行模型更新和迁移的详细说明,请参阅此处

特别感谢 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

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

屏幕截图

giiant-0 2-screen-1 giiant-0 2-screen-2

链接