dlds/yii2-giixer

扩展的 Yii2 Gii 模块,包含常用处理程序

安装次数: 3,605

依赖者: 0

建议者: 0

安全: 0

星标: 3

关注者: 3

分支: 0

开放问题: 2

类型:yii2-extension


README

为 Yii2 扩展的 gii 模块,包括一系列有用的处理程序、辅助工具、特性和其他组件。此模块根据自身组件生成所需的模型、控制器和其他类。当您使用 yii2-giixer 模块时,默认的 yii-gii 生成器不可用。

安装

通过 composer 安装此扩展是首选方式。

运行以下命令:

$ composer require dlds/yii2-giixer

或者将以下内容添加到您的 composer.json 文件的 require 部分:

"dlds/yii2-giixer": "~3.0.0"

迁移

无需任何迁移即可运行。模块本身不会在数据库中存储任何数据。

结构

Giixer 定义了自己的易于维护和扩展的应用程序结构,这与默认(由 gii 生成的)结构略有不同。以下您可以找到 giixer 会生成什么以及如何生成。

ActiveRecords

Giixer 使用自己的 ActiveRecords(AR)结构。以下是所有 4 个 AR 及其代表的意义的描述。每个都在应用的概念层面上。

  1. 基础 AR
    • 顶级且不可编辑的 AR
    • 仅由 giixer 本身维护。
    • 始终扩展 GxActiveRecord
    • 下一次 giixer 生成后,手动更改将丢失
    • 文件位于 common\models\db\basecommon\modules\modulename\models\db\base
  2. 通用 AR
    • 扩展 基础 AR
    • 可编辑并由开发人员维护
    • 任何 giixer 生成后,手动更改不会丢失
    • 文件位于 common\models\dbcommon\modules\modulename\models\db
    • 只有此模型可以直接由应用程序使用

结构图显示在 此处

此 AR 模型结构让您有机会轻松更新您的数据库模式,同时仍然能够重新生成您的 AR 模型而不会丢失当前的代码更改。

MyModel 中显示了存储在 基础 AR 中的某些附加功能

ActiveQueries

每个 AR 模型都生成一个自定义 ActiveQuery 类,并将其分配给 基础 AR

在 AR 生成期间,Giixer 创建以下 3 个 ActiveQuery(AQ)类。

  1. 通用 AQ
    • 扩展 \yii\db\ActiveQuery
    • 可编辑并由开发人员维护
    • 文件位于 common\models\db\basecommon\modules\modulename\models\db\base
    • 始终在 基础 AR 中加载(只能直接由应用程序使用)

基础 AR 将自动加载适当的 AQ。

结构图显示在 此处

Giixer 生成默认 AQ 逻辑,以便能够轻松使用适当的 AR 模型类在自定义查询中。

默认 AQ 逻辑显示在 MyModelQuery

辅助工具

Giixer 定义了一组有用的辅助工具。以下您可以看到 giixer 提供哪些辅助工具。

URL 辅助工具

为每个 AR 模型生成自己的 URL 路由和规则辅助工具。

Giixer 为 backendfrontend 应用程序创建以下 2 个辅助工具(HLP)。

  1. 路由辅助工具
    • 继承自 \dlds\giixer\components\helpers\GxRouteHelper 或你在 helperRouteBaseClass 中设置的定制类(参见 配置 部分)
    • 包含 giixer 生成的所有默认路由
    • 直接由应用程序使用
    • 前端文件位于 frontend\components\helpers\url\routesfrontend\modules\modulename\components\helpers\url\routes
    • 后端文件位于 backend\components\helpers\url\routesbackend\modules\modulename\components\helpers\url\routes
  2. 规则 HLP
    • 继承自 \dlds\giixer\components\helpers\GxUrlRuleHelper 或你在 helperRuleBaseClass 中设置的定制类(参见 配置 部分)
    • 包含所有 giixer 生成的路由的规则
    • 通常用于 URL 规则配置中
    • 前端文件位于 frontend\components\helpers\url\rulesfrontend\modules\modulename\components\helpers\url\rules
    • 后端文件位于 backend\components\helpers\url\rulesbackend\modules\modulename\components\helpers\url\rules

这两个辅助类的主要思想是将规则/路由封装在单个类中,并为开发者提供易于使用的接口。

基本的路由和规则辅助类示例: MyBasicRouteHelperMyBasicUrlRuleHelper

为了能够在翻译文件(i18n)中定义可翻译的 URL slug,你必须在应用程序引导中加载你的规则,如下所示。否则,翻译将不会工作。参见 Yii2 动态添加规则

class AppBootstrapHandler implements \yii\base\BootstrapInterface {

    public function bootstrap($app)
    {
        return $this->addMainRules($app);
    }

    /**
     * Adds main application rules
     */
    protected function addMainRules(\yii\web\Application $app)
    {
        $rules = require(\Yii::getAlias('@frontend/config/url/rules.php'));

        return $app->getUrlManager()->addRules($rules, false);
    }
}

其中 @frontend/config/url/rules.php 应该如下所示。

$rules = [
    // ...
    MyBasicUrlRuleHelper::index(),
    MyBasicUrlRuleHelper::view(),
    // ...
];

return array_merge(
    $rules, require(__DIR__.'/rules-local.php')
);
?>

然后在应用程序配置中,只需设置你的 AppBootstrapHandler 以进行处理。

// ...
'bootstrap' => [
    '\frontend\components\handlers\AppBootstrapHandler',
    // ...
]    
// ...

提示:通常,你希望有更好的外观的 URL,其中不显示模型主键。例如,你有一个自己的 CMS 系统,其中每个 Post 模型都有自己的 slug,看起来像 my-custom-post-title,并且你希望最终的 URL 看起来像 http://www.mydomain.com/my-custom-post-title/。在这种情况下,你必须根据 MyAdvancedRuleHelper 更新你的 UrlRuleHelper

模型辅助类

此辅助类定义了在 GxActiveRecord 类中使用的方法。其中包含将查询参数适配以传递批量赋值的方法,以及轻松更改验证规则或场景定义的方法。

更多信息请参见 GxModelHelper

其他辅助类

Giixer 定义了一些其他辅助类,这些类在基本的应用程序操作中更为复杂且有用。每个辅助类都有自己详尽的文档。

更多信息请参见 Giixer 辅助类

处理器

Giixer 定义了两个主要的处理器类,这对于控制器保持其方法精简和有序非常有用。

  1. GxCrudHandler
    • 定义了自己的创建、读取、更新、删除方法的方法
    • 在每次操作期间调用 GxCrudEvent,其中包含有关操作结果的所有数据
    • 通常用于操作标准 AR 模型类及其相应的数据库条目
  2. GxHandler
    • 定义了根据验证结果处理适当的回调的自己的方法来验证模型
    • 通常用于非 AR 模型的操作,其中 save() 意味着创建多个 AR 等...

更多信息请参见 Giixer 处理器

配置

通过将其添加到应用程序引导中,在配置文件中启用 gii 模块。

$config['bootstrap'][] = 'gii';

将默认的 gii 模块类替换为 giixer 类。

$config['modules']['gii'] = [
    'class' => 'dlds\giixer\Module',
];

您还可以通过设置额外的配置选项来修改 giixer 模块的行为以满足您的需求。请参见下文。

namespaces 选项

定义命名空间映射到生成的类。当某些类的命名空间与默认命名空间不匹配时,这很有用。例如,如果您的应用程序分为模块,并且需要为这些模块生成类。

[
    '^{Modules}[a-zA-Z]+Form$' => '{module}\models\\forms',
    '^Core[a-zA-Z]+Form$' => 'models\\forms',
    '^{modules}-[a-z-]+$' => '{module}\\views',
]

在上面的示例中,我们可以看到我们的应用程序包含模块,还有一些直接放置的 "Core" 文件。

您可以看到,我们还定义了视图的规则,以便能够将生成的视图文件放置到适当的文件夹中。

在指定规则时,您可以使用一些特殊的标签。

特殊标签
  • {Module} - 将被替换为当前模块名称
  • {Modules} - 将被替换为所有模块名称的正则表达式
  • {module} - 将被替换为当前模块 ID
  • {modules} - 将被替换为所有模块 ID 的正则表达式

要使用这些特殊标签,您必须指定您的模块名称和 ID。

[
    'edu' => 'Edu',
    'shop' => 'Shop',
    // ...
]

数组索引用于模块 ID,数组值用于模块名称。

在生成过程中,Giixer 将自动替换这些标签,使最终的规则看起来如下 (我们正在生成一些 Edu 模型)

[
    '^(Edu|Shop){1}[a-zA-Z]+Form$' => 'modules\edu\models\\forms',
    '^Core[a-zA-Z]+Form$' => 'models\\forms',
    '^(edu|shop){1}-[a-z-]+$' => 'modules\edu\\views',
]

bases 选项

定义特定组件、控制器和其他应用程序类的基类。这是基于派生类的正则表达式和基类的完全限定名称。

[
	BaseHelper::RK_CONTROLLER_BE => [
		'{Modules}[a-zA-Z]+Controller$' => '{module}\\controllers\\base\\{Module}BaseController',
		'Core[a-zA-Z]+Controller$' => 'controllers\\base\\CoreBaseController',
	],
	BaseHelper::RK_CONTROLLER_FE => [
		'{Modules}[a-zA-Z]+Controller$' => '{module}\\controllers\\base\\{Module}BaseController',
		'Core[a-zA-Z]+Controller$' => 'controllers\\base\\CoreBaseController',
    ],
    // ...
]	

在上面的配置中,您可以看到模块控制器的配置,它们具有自定义的基类。

如果指定了自定义控制器(前端或后端)的基类,它必须扩展 GxController。否则,将直接使用 GxController 作为父类。(GxController 扩展默认的 \yii\web\Controller)。

如果设置了自定义路由助手基类,它必须扩展 GxRouteHelper。否则,将直接使用 GxRouteHelper 作为父类。

如果设置了自定义路由助手基类,它必须扩展 GxUrlRuleHelper。否则,将直接使用 GxUrlRuleHelper 作为父类。

translations 选项

定义应自动生成的翻译文件。此选项由包含语言代码的数组定义。

['en', 'de', 'cs']

对于上述内容,将生成英语、德语和捷克语的翻译文件。

messages 选项

定义自定义翻译类别。

[
	'dynagrid' => [
 		'^{Modules}[a-zA-Z]+$' => '{module}/dynagrid',
    ],
],

对于上述生成器,在匹配正则表达式 '^Edu[a-zA-Z]+$' 的类中,使用类别 'edu/dynagrid' 而不是 'dynagrid'。

有关更多信息,请参见 Giixer 模块主类

版权所有 © Digital Deals s.r.o. 2016