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'];