bchalier / laravel-modules
laravel中的模块管理。
Requires
- php: ^8.0
- ext-json: *
- ergebnis/json-printer: ^3
Requires (Dev)
- laravel/framework: ^8.0
- orchestra/testbench: ^6.14
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-19 15:12:16 UTC
README
简介
此包旨在允许您将laravel允许您创建的所有内容分成模块。
尽管其他人也在做同样的事情,但我还是制作了这个包,因为在使用了它们之后,过了一段时间我总是发现它们不完整、不再维护、不遵守laravel标准和理念(例如,使用module:make-controller命令而不是make:controller,另一个文件结构等)。所以在尝试了3-4个模块后,我感到沮丧,并开始制作自己的包,试图不重复之前看到的错误。
这是结果,我希望您会像我一样喜欢它!这是我的第一个公开包,所以请随时告诉我您可能有的任何建议、问题、错误报告、功能请求!
版本控制
此包遵循语义版本控制,请参阅: https://semver.org/
安装
您可以通过composer安装此包
composer require bchalier/laravel-modules
命令
所有标准make命令都通过-M|module=[module alias]选项进行了扩展,以下是一个示例
php artisan make:model -Muser UnicornModel
由于这是一个扩展而不是替换,因此所有选项都是可用和工作的(或应该是!)
php artisan make:model -cfmr -Muser UnicornModel
此包还添加了一些用于处理模块本身的命令
make:module {modules*} {?--fill}
: 创建一个或多个新模块,使用--fill选项在新建的模块中添加所有可能的元素。module:install {modules*}
: 安装一个或多个模块(在数据库中)module:reinstall {modules*}
: 重新安装模块(更新数据库),非常有用module:uninstall {modules*}
: 卸载一个或多个模块(保留文件,清理数据库)module:enable {modules*}
: 加载模块(文件总是由composer加载,但提供者、路由等只有在模块启用时才会加载)module:disable {modules*}
: 禁用模块module:delete {modules*}
: 删除模块的数据库和文件,请小心,此命令将删除所有模块文件并卸载它。
结构
模块内部几乎就是一个普通的laravel,以下是一个示例(您可以自己使用php artisan make:module test --fill
来创建它)
modules/Test/
├── app
│ ├── Broadcasting
│ │ └── DummyChannel.php
│ ├── Console
│ │ ├── Commands
│ │ │ └── DummyCommand.php
│ │ └── Kernel.php
│ ├── Events
│ │ └── DummyEvent.php
│ ├── Exceptions
│ │ └── DummyException.php
│ ├── Http
│ │ ├── Controllers
│ │ │ └── DummyController.php
│ │ ├── Middleware
│ │ │ └── DummyMiddleware.php
│ │ ├── Requests
│ │ │ └── DummyRequest.php
│ │ └── Resources
│ │ └── DummyResource.php
│ ├── Jobs
│ │ └── DummyJob.php
│ ├── Listener
│ │ └── DummyListener.php
│ ├── Mail
│ │ └── DummyMail.php
│ ├── Models
│ │ └── DummyModel.php
│ ├── Notification
│ │ └── DummyNotification.php
│ ├── Observers
│ │ └── DummyObserver.php
│ ├── Policies
│ │ └── DummyPolicy.php
│ ├── Providers
│ │ └── DummyProvider.php
│ ├── Rules
│ │ └── DummyRule.php
│ └── Services
│ └── DummyService.php
├── composer.json
├── config
│ ├── superconfig.php
├── database
│ ├── factories
│ │ └── DummyFactory.php
│ ├── migrations
│ │ └── 2019_07_04_105604_dummy_migration.php
│ └── seeds
│ ├── DatabaseSeeder.php
│ └── DummySeeder.php
├── resources
│ └── lang
│ ├── en
│ │ └── exceptions.php
│ └── fr
│ └── exceptions.php
├── routes
│ ├── api.php
│ ├── channels.php
│ ├── console.php
│ └── web.php
└── tests
├── Feature
│ └── DummyTest.php
└── Unit
└── DummyTest.php
Composer
在模块的根目录中,您有一个composer.json,与您所知道的相同,只是多了一点,以下是一个示例。
它不会安装包,您是否想查看wikimedia/composer-merge-plugin,但它与composer 2不兼容。
{
"name": "Core",
"description": "A perfect description for a brand new module !",
"keywords": [
"module",
"laravel"
],
"license": "MIT",
"require": {
"php": "^7.1"
},
"extra": {
"laravel-modules": {
"name": "Core",
"alias": "core",
"description": "The core module, for module management.",
"install": {
"migrate": true,
"createDir": "modules"
},
"loadParameters": {
"compartmentalize": {
"migrations": true
}
},
"providers": [
"SystemModules\\Core\\App\\Providers\\EventServiceProvider",
"SystemModules\\Core\\App\\Providers\\CommandExtendProvider"
],
"aliases": {
"Test": "Illuminate\\Support\\Facades\\App",
"ModulesManager": "SystemModules\\Core\\Services\\ModulesManager"
}
}
}
}
这意味着:
- name : 实际上可以是任何您想要的内容,只是一个外观值。
- alias : 这是您将在每个命令中使用的内容。
- description : 一个描述,当然了。
- install.migrate : 在模块安装时迁移迁移。
- install.createDir : 在安装时创建一个您喜欢的目录。
- loadParameters.compartmentalize.migrations : 将迁移从您的应用程序的其他部分隔离出来,在这个示例中,模块表迁移不会在除
migrate:fresh
之外的任何migrate
命令中调用,因为该命令会删除所有表而不管迁移如何,您将需要在此之后重新安装所有模块。 - 提供者 : 列出你希望在模块中加载的所有提供者。
- 别名 : 列出你希望在模块中拥有的所有别名。
请记住,您需要调用 php artisan module:reinstall YOUR_MODULE_ALIAS
来更新上述设置。
.env
这里添加了一些设置,可能用于您的 .env 文件。
API_PREFIX='web' // a prefix for all the web routes, '' by default
WEB_PREFIX='api' // a prefix for all the api routes, 'api' by default
MODULES_CONFIG_PATH='modules.json' // the location of the global config file (it store the installed modules)
基本就是这样,可能还有很多改进的空间,所以我在等待您的评论!