digitalwand/yii2-modular-app

构建模块化 Yii2 应用的 API

1.0 2019-11-08 17:01 UTC

This package is auto-updated.

Last update: 2024-09-09 04:35:40 UTC


README

构建模块化 Yii2 应用的 API。

摘要

Yii2 具有灵活的模块化系统。但是,如果我们有一个由许多模块组成的项目,我们可能会面临以下问题:

  • 每次都需要编写样板代码来使模块控制器正常工作,并在配置文件中启用模块。
  • 迁移是项目级别的,您需要一点额外的代码来将迁移存储到模块的代码中。再次是样板代码。
  • 邮件模板是项目级别的,我们还需要额外的代码...
  • 模块自动加载仅在调用模块的控制器时才起作用。但是,如果您只提供 API 的模块呢?我们需要手动控制模块的加载。
  • 在 Yii2 模块内部可能出现一切混乱。您没有任何严格的模式来组织结构。因此,没有邪恶的团队领导的项目中的模块可能看起来非常不同。

这个扩展的目的就是避免这些令人烦恼的问题,并使模块化项目的开发更加快速,代码更加整洁和结构化。

安装

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

运行以下命令:

php composer.phar require --prefer-dist digitalwand/yii2-modular-app "*"

或者

"digitalwand/yii2-modular-app": "*"

将其添加到您的 composer.json 文件的 require 部分。

现在,您应该使用模块的 CoreConsoleApplication 和 CoreWebApplication 替换 Yii2 的 Modify,将 web/index.php 更改为如下所示:

<?php
error_reporting(E_ALL);
ini_set('display_errors',1);

use digitalwand\yii2ModularApp\applications\CoreWebApplication;

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
require(__DIR__ . '/../vendor/digitalwand/yii2-modular-app/src/applications/CoreApplication.php');
require(__DIR__ . '/../vendor/digitalwand/yii2-modular-app/src/applications/CoreWebApplication.php');

$config = require __DIR__ . '/../config/web.php';

(new CoreWebApplication($config))->run();

以及 yii 文件更改如下所示:

#!/usr/bin/env php
<?php
/**
 * Yii console bootstrap file.
 *
 * @link https://yiiframework.cn/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license https://yiiframework.cn/license/
 */

use digitalwand\yii2ModularApp\applications\CoreConsoleApplication;

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
require(__DIR__ . '/vendor/digitalwand/yii2-modular-app/src/applications/CoreApplication.php');
require(__DIR__ . '/vendor/digitalwand/yii2-modular-app/src/applications/CoreConsoleApplication.php');

$config = require __DIR__ . '/config/console.php';

$application = new CoreConsoleApplication($config);
$exitCode = $application->run();
exit($exitCode);

如果一切如常工作,则安装成功!

创建新模块

使用 Gii 是学习和使用新的模块系统的最简单方法。

在控制台尝试以下命令:

yii gii/strict-module --moduleClass example --moduleID moduleName

生成后,您将看到一个名为 @app/modules/example/moduleName 的新目录,其中包含控制器、迁移、邮件模板等,一切都可以直接使用!

启用和禁用模块

以这种方式创建的模块可以通过在应用程序的配置中添加特殊的数组键简单地启用。

$config = [
    'customModules' => [
        'example.moduleName'
    ]
];

不需要提供模块的类名,但如果需要,您可以像通常那样传递额外的模块设置。

模块命名

请记住,实际的模块名称是 "moduleName",而不是 "example.moduleName"! 这对于例如 $app->hasModule() 函数至关重要。

模块的部分 "example" 是一个简单的扩展,用于使您的模块更有结构。但是,具有相同名称但具有不同命名空间的模块将发生冲突,因为 Yii 只看到模块名称!