creolab / laravel-modules
Laravel 4中的应用特定模块
Requires
- php: >=5.3.0
- laravel/framework: ~4
- way/generators: ~1
This package is auto-updated.
Last update: 2024-09-17 18:44:33 UTC
README
此包已不再维护。
我鼓励您使用composer包来管理模块,以便获得最大的灵活性。
Laravel 4中的模块
在Laravel 4中,可以通过向您的 "composer.json" 文件中添加以下内容来启用应用特定模块
"require": {
"creolab/laravel-modules": "dev-master"
}
并添加一个新的提供者到您的 "app/config/app.php" 文件中的提供者列表
'providers' => array(
'Creolab\LaravelModules\ServiceProvider',
);
您还需要将您的模块目录添加到composer自动加载器中
"autoload": {
"classmap": [
"app/modules"
]
}
这也意味着每次您向模块中添加一个新的类时,都需要运行 "composer dump-autoload"
默认情况下,您可以在 "app" 目录下添加一个 "modules" 目录。以下是我项目中的一个结构示例
app/
|-- modules
|-- auth
|-- controllers
|-- models
|-- views
|-- module.json
|-- content
|-- controllers
|-- models
|-- views
|-- module.json
|-- shop
|-- module.json
|-- system
|-- module.json
注意,每个模块都有一个 "module.json" 文件,其中您可以启用/禁用模块。我计划添加更多元数据到这些模块定义中,但我需要反馈来确定其中应该包含什么。首先可能是某种启动类。
如果您想将模块放在多个目录中,您需要按照以下方式更改包配置文件
'path' => array(
'app/modules',
'public/site',
'another/folder/containing/modules',
),
并且不要忘记在 composer.json 文件中将这些目录添加到自动加载列表中。
一个可用的选项是模块加载的顺序。这可以通过向您的 module.json 文件中添加以下内容来实现
"order": 5
默认顺序为0,所以如果您没有定义它,请记住这一点。
目前请查看示例实现,并请提供反馈 ;)
https://github.com/bstrahija/laravel-modules-example
命令
此包通过以下两种命令提供可用性
php artisan modules
它简单地显示根据配置中设置的模式设置的所有当前模块。并且
php artisan modules:scan
如果您将模块设置为 "manifest" 模式,则需要此命令(见下文)。此命令扫描模块的方式与 "auto" 模式相同,但将结果缓存到manifest文件中。
优化
默认情况下,该包扫描 "modules" 目录中的 "module.json" 文件。这不是发现模块的最佳方法,我计划在Finder类中实现某种缓存。为了进一步优化模块Finder,您可以发布包配置,并通过运行以下命令将模块和定义直接添加到配置文件中
php artisan config:publish creolab/laravel-modules
并编辑文件 "app/config/packages/creolab/laravel-modules/config.php"。您只需将 "mode" 参数从 "auto" 更改为 "manual",并在 "modules" 键下列出您的模块。配置中已提供示例。
注意:对于具有多个路径的手动模式:Laravel-Modules无法确定使用哪个路径。因此,请指定包含您想要加载的模块的文件夹。例如:
'modules' => [
'app/modules' => [
'system' => ['enabled' => true],
],
'another/modules/path' => [
'pages' => ['enabled' => false],
'seo' => ['enabled' => true],
],
],
您还可以将多个模块路径作为数组添加,但请注意,如果模块具有相同的名称,则可能会出现问题。
包含文件
您还可以指定模块中要自动包含的文件。只需在 module.json 配置中添加文件列表即可
{
"include": [
"breadcrumbs.php"
]
}
默认设置了一些文件,如果存在,则会被包含。请查看最新的配置文件,并在需要时重新发布配置。默认情况下,以下文件将被包含
'include' => array(
'helpers.php',
'filters.php',
'composers.php',
'routes.php',
'bindings.php',
'observers.php',
)
因此,您可以选择将自定义文件添加到全局配置中,这将使每个模块都查找这些文件,或者您可以通过将它们添加到 module.json 文件中来按模块设置。
服务提供商
新增功能是为每个模块注册服务提供商。只需在您的 module.json 文件中添加一行,如下所示
"provider": "App\\Modules\\Content\\ServiceProvider"
这些服务提供商类与您添加到 app/config/app.php 配置中的任何其他服务提供商完全一样,因此通过扩展 \Illuminate\Support\ServiceProvider 类并添加适当的方法来设置这些类。
您也可以通过提供一个数组来为每个模块注册多个提供商。
"provider": [
"App\\Modules\\Content\\ServiceProvider",
"App\\Modules\\Content\\AnotherServiceProvider"
]
请注意,您可能需要运行 composer dump-autoload 以避免出现缺少类的错误。
模块清单
另一种可能的模式是 "manifest",这基本上会在您的 Laravel 存储目录中写入一个包含所有模块定义的 JSON 清单文件。这只会进行一次,并且要更新清单文件,您需要删除它或通过以下命令重新扫描模块
php artisan modules:scan
资源
最近添加了为每个模块发布公共资源的能力。只需运行
php artisan modules:publish
然后所有包含 "assets" 目录的模块都将发布到 Laravel 公共目录。您也可以通过提供模块名称来为单个模块发布资源
php artisan modules:publish content
迁移
每个模块都可以有自己的迁移,并且它们需要位于模块/migrations 目录中。例如,如果您想为 auth 模块创建一个创建用户表的迁移
php artisan migrate:make create_users_table --path=app/modules/auth/migrations --table=users --create
要运行所有模块迁移,请这样做
php artisan modules:migrate
或要运行特定模块的迁移
php artisan modules:migrate auth
如果您在 module.json 中包含了一个 seeder 设置,您还可以从模块中填充数据库。只需将 --seed 选项传递给命令
php artisan modules:migrate --seed
填充
模块也可以有填充器。只需像创建常规填充器一样创建类,将其放置在模块内部某处,并确保运行 composer dump-autoload。然后在您的 module.json 文件中添加以下内容
"seeder": "App\\Modules\\Content\\Seeds\\DatabaseSeeder"
此设置应包含您的填充器类的命名空间路径。现在只需运行
php artisan modules:seed
以填充所有模块。或者您可以为特定模块进行操作
php artisan modules:seed content
命令
您可以添加模块特定的命令。这是一个 artisan 命令文件创建的示例
php artisan command:make <MyModuleCommandName> --path=app/modules/<MyModule>/commands --namespace=App\Modules\<MyModule>\Commands --command=modules.mymodule:mycommand
然后在 module.json 中添加(如果您有多个命令,也可以添加一个数组)
"command": "App\\Modules\\<MyModule>\\Commands\\MyModuleCommandName"
在 dump-autoload 之后,您现在可以从命令行执行 modules.mymodule:mycommand
php artisan modules.mymodule:mycommand
别名
如果您在模块中声明了 Facades,您可能希望为模块创建别名,您可以在 module.json
中简单地引用您的别名
"alias": {
"<MyAlias>" "App\\Modules\\<MyModule>\\Facades\\<MyFacade>"
}
许可
此软件包是开源软件,根据 MIT 许可证 许可。