tur1 / laravelmodules
Laravel模块化页面创建包
v1.0.9
2024-10-02 11:03 UTC
Requires
- php: ^7.4|^8.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
README
tur1/laravel-modules 是一个用于通过模块化来管理大型 Laravel 应用程序的 Laravel 包。此包提供了一系列 Artisan 命令和工具,以方便地在 Laravel 应用程序中创建模块、页面和过滤器。
使用 php artisan module:create Admins 命令来生成您的第一个模块。以下结构将被生成。
Modules/
├── Admins/
├── Controllers/
│ └── AdminController.php
├── Database/
│ ├── factories/
│ │ └── AdminFactory.php
│ ├── migrations/
│ │ └── 2024_09_16_xxxxxxx_admins_table.php
│ └── seeders/
│ └── AdminSeeder.php
├── Enums/
│ ├── AdminGenderEnum.php
│ └── AdminStatusEnum.php
├── Events/
│ ├── AdminCreatedEvent.php
│ ├── AdminDeletedEvent.php
│ └── AdminUpdatedEvent.php
├── Exceptions/
│ └── AdminException.php
├── Filters/
│ ├── GenderFilter.php
│ └── StatusFilter.php
├── Middleware/
│ └── AdminMiddleware.php
├── Models/
│ └── Admin.php
├── Observers/
│ └── AdminObserver.php
├── Policies/
│ └── AdminPolicy.php
├── Repositories/
│ └── AdminRepository.php
├── Requests/
│ ├── StoreAdminRequest.php
│ └── UpdateAdminRequest.php
├── Resources/
│ ├── AdminListResource.php
│ └── AdminShowResource.php
├── Routes/
│ └── AdminRoutes.php
├── Services/
│ └── AdminService.php
└── Traits/
├── AdminAttributesTrait.php
├── AdminRelationshipsTrait.php
└── AdminScopesTrait.php
安装
要安装此包,请运行以下命令
composer require tur1/laravelmodules
Artisan 命令
创建模块
要创建新模块,请使用以下命令
php artisan module:create {name}
示例
php artisan module:create Users
这将生成位于 app/Modules 目录中的 Users 模块。
创建页面
要在模块内创建新页面,请使用以下命令
php artisan page:create {name}
示例
php artisan page:create Dashboard
这将生成指定模块中的 Dashboard 页面。
创建过滤器
要在模块内创建新过滤器,请使用以下命令
php artisan filter:create {filter-name} --module={module-name}
示例
php artisan filter:create Filter --module=Users
这将创建位于 app/Modules/Users/Filters 目录中的 Filter 类。
在模型中注册过滤器
您可以通过在模型中定义 filters() 方法来为模型注册过滤器。例如
public static function filters() { return [ Filter::class, ]; }
这允许您在模型查询上应用过滤器,从而更容易构建动态过滤逻辑。
可搜索字段
要启用模型中的搜索功能,请定义一个 $search 属性。此属性应是一个可以搜索的字段名称数组。您还可以通过指定关系和字段名称(例如 roles.name)来包含相关字段。
示例
protected $search = ['name', 'email', 'roles.name'];