internachi/modular
Composer 安装命令:
composer require internachi/modular
包简介
Modularize your Laravel apps
README 文档
README
internachi/modular
internachi/modular is a module system for Laravel applications. It uses
Composer path repositories for autoloading,
and Laravel package discovery for module
initialization, and then provides minimal tooling to fill in any gaps.
This project is as much a set of conventions as it is a package. The fundamental idea
is that you can create “modules” in a separate app-modules/ directory, which allows you to
better organize large projects. These modules use the existing
Laravel package system, and follow existing Laravel
conventions.
Walkthrough Video
Installation
To get started, run:
composer require internachi/modular
Laravel will auto-discover the package and everything will be automatically set up for you.
Publish the config
While not required, it's highly recommended that you customize your default namespace
for modules. By default, this is set to Modules\, which works just fine but makes it
harder to extract your module to a separate package should you ever choose to.
We recommend configuring a organization namespace (we use "InterNACHI", for example).
To do this, you'll need to publish the package config:
php artisan vendor:publish --tag=modular-config
Create a module
Next, let's create a module:
php artisan make:module my-module
Modular will scaffold up a new module for you:
app-modules/
my-module/
composer.json
src/
tests/
routes/
resources/
database/
It will also add two new entries to your app's composer.json file. The first entry registers
./app-modules/my-module/ as a path repository,
and the second requires modules/my-module:* (like any other Composer dependency).
Modular will then remind you to perform a Composer update, so let's do that now:
composer update modules/my-module
Optional: Config synchronization
You can run the sync command to make sure that your project is set up for module support:
php artisan modules:sync
This will add a Modules test suite to your phpunit.xml file (if one exists)
and update your PhpStorm Laravel plugin
configuration (if it exists) to properly find your module's views.
It is safe to run this command at any time, as it will only add missing configurations.
You may even want to add it to your post-autoload-dump scripts in your application's
composer.json file.
Usage
All modules follow existing Laravel conventions, and auto-discovery should work as expected in most cases:
- Commands are auto-registered with Artisan
- Migrations will be run by the Migrator
- Factories are auto-loaded for
factory() - Policies are auto-discovered for your Models
- Blade components will be auto-discovered
- Event listeners will be auto-discovered
Commands
Package Commands
We provide a few helper commands:
php artisan make:module— scaffold a new modulephp artisan modules:cache— cache the loaded modules for slightly faster auto-discoveryphp artisan modules:clear— clear the module cachephp artisan modules:sync— update project configs (likephpunit.xml) with module settingsphp artisan modules:list— list all modules
Laravel “make:” Commands
We also add a --module= option to most Laravel make: commands so that you can
use all the existing tooling that you know. The commands themselves are exactly the
same, which means you can use your custom stubs
and everything else Laravel provides:
php artisan make:cast MyModuleCast --module=[module name]php artisan make:controller MyModuleController --module=[module name]php artisan make:command MyModuleCommand --module=[module name]php artisan make:component MyModuleComponent --module=[module name]php artisan make:channel MyModuleChannel --module=[module name]php artisan make:event MyModuleEvent --module=[module name]php artisan make:exception MyModuleException --module=[module name]php artisan make:factory MyModuleFactory --module=[module name]php artisan make:job MyModuleJob --module=[module name]php artisan make:listener MyModuleListener --module=[module name]php artisan make:mail MyModuleMail --module=[module name]php artisan make:middleware MyModuleMiddleware --module=[module name]php artisan make:model MyModule --module=[module name]php artisan make:notification MyModuleNotification --module=[module name]php artisan make:observer MyModuleObserver --module=[module name]php artisan make:policy MyModulePolicy --module=[module name]php artisan make:provider MyModuleProvider --module=[module name]php artisan make:request MyModuleRequest --module=[module name]php artisan make:resource MyModule --module=[module name]php artisan make:rule MyModuleRule --module=[module name]php artisan make:seeder MyModuleSeeder --module=[module name]php artisan make:test MyModuleTest --module=[module name]
Other Laravel Commands
In addition to adding a --module option to most make: commands, we’ve also added the same
option to the db:seed command. If you pass the --module option to db:seed, it will look
for your seeder within your module namespace:
php artisan db:seed --module=[module name]will try to callModules\MyModule\Database\Seeders\DatabaseSeederphp artisan db:seed --class=MySeeder --module=[module name]will try to callModules\MyModule\Database\Seeders\MySeeder
Blade Components
Your Laravel Blade components will be automatically registered for you under a component namespace. A few examples:
| File | Component |
|---|---|
app-modules/demo/src/View/Components/Basic.php |
<x-demo::basic /> |
app-modules/demo/src/View/Components/Nested/One.php |
<x-demo::nested.one /> |
app-modules/demo/src/View/Components/Nested/Two.php |
<x-demo::nested.two /> |
app-modules/demo/resources/components/anonymous.blade.php |
<x-demo::anonymous /> |
app-modules/demo/resources/components/anonymous/index.blade.php |
<x-demo::anonymous /> |
app-modules/demo/resources/components/anonymous/nested.blade.php |
<x-demo::anonymous.nested /> |
Translations
Your Laravel Translations will also be automatically registered under a component namespace for you. For example, if you have a translation file at:
app-modules/demo/resources/lang/en/messages.php
You could access those translations with: __('demo::messages.welcome');
Customizing the Default Module Structure
When you call make:module, Modular will scaffold some basic boilerplate for you. If you
would like to customize this behavior, you can do so by publishing the app-modules.php
config file and adding your own stubs.
Both filenames and file contents support a number of placeholders. These include:
StubBasePathStubModuleNamespaceStubComposerNamespaceStubModuleNameSingularStubModuleNamePluralStubModuleNameStubClassNamePrefixStubComposerNameStubMigrationPrefixStubFullyQualifiedTestCaseBaseStubTestCaseBase
Comparison to nwidart/laravel-modules
Laravel Modules is a great package that’s been
around since 2016 and is used by 1000's of projects. The main reason we decided to build
our own module system rather than using laravel-modules comes down to two decisions:
- We wanted something that followed Laravel conventions rather than using its own directory structure/etc.
- We wanted something that felt “lighter weight”
If you are building a CMS that needs to support 3rd-party modules that can be dynamically enabled and disabled, Laravel Modules will be a better fit.
On the other hand, if you're mostly interested in modules for organization, and want to stick closely to Laravel conventions, we’d highly recommend giving InterNACHI/Modular a try!
internachi/modular 适用场景与选型建议
internachi/modular 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 826.98k 次下载、GitHub Stars 达 1.17k, 最近一次更新时间为 2020 年 07 月 07 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「module」 「modules」 「laravel」 「modular」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 internachi/modular 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 internachi/modular 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 internachi/modular 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
This is Paymorrow module for OXID eShop.
Analysis module for finding problematical shop data.
yii2 swiper slider
An interactive tour through the TYPO3 backend.
bootstrap select field module implementing http://silviomoreto.github.io/bootstrap-select/
Yii2 module to manage website content. Kind of a CMS...
统计信息
- 总下载量: 826.98k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1174
- 点击次数: 19
- 依赖项目数: 14
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-07-07
