william / laravel-rigger
laravel的Rigger
Requires
- illuminate/database: ~5.5
- illuminate/routing: ^5.5
- illuminate/support: ^5.5
- prettus/l5-repository: ^2.6
- spatie/laravel-fractal: ^5.3
- spatie/laravel-permission: ^2.7
README
Laravel Rigger 受facebook/graphql的启发,后者是一种用于API的查询语言。但我认为它在Web开发领域的粒度太细了。以实体作为查询的最小单位,可以更快速地基于必要的配置生成RESTful后端,这些配置描述了实体和关系。
目录
安装
Composer
composer require william/laravel-rigger
Laravel
仅支持 Laravel >= 5.5,ServiceProvider 将自动附加。发布实体配置是必要的
php artisan vendor:publish --provider "WilliamWei\LaravelRigger\Providers\LaravelRiggerProvider"
这将生成 config/entities.php
和 config/rigger.php
文件。然后注册 RouteServiceProvider
中的路由
/** * Define the routes for the application. * * @return void */ public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); Rigger::routes(); }
您可以使用此命令来检查生成的路由。
php artisan route:list
实体描述
所有需要由 rigger 处理的模型/实体都应该在 config/entities.php
中定义。
关系
支持四种关系:hasOne
belongsTo
hasMany
belongsToMany
。这些数组中的项可以是数组或字符串。以 User
为例,User
可能通过 user_role
表拥有多个 Role
,因此您可以这样定义它
'belongsToMany' => [ 'roles', ]
如果您想修改连接表,您可以使用数组
'belongsToMany' => [ ['roles', 'model_has_roles', 'model_id', 'role_id'], ]
所有这些定义都与https://laravel.net.cn/docs/5.5/eloquent-relationships中的文档一致
查询
这部分由andersao/l5-repository提供支持,它最吸引人的功能是允许前端执行动态搜索,过滤数据并自定义查询。请参阅参考
可以通过这种方式搜索的字段应定义在 config/entities.php
中。例如
'user' => [ 'searchableFields' => [ 'name', ], ]
包含
这部分由spatie/laravel-fractal提供支持,它允许前端包含(即嵌入、嵌套或侧加载)复杂数据结构的关系。例如,当您查询 /users
时,您可能同时想知道他们的角色信息。因此,您可以添加 include
参数,例如 /users?include=roles
{ "data": [{ "id": 1, "name": "rigger", "email": "rigger@email.com", "password": "rigger", "remember_token": "jsdklfjlsdjfl", "created_at": "2018-02-09 00:00:00", "updated_at": "2018-02-09 00:00:00", "roles": { "data": [{ "id": 1, "name": "admin", "guard_name": "api", "created_at": "2018-02-09 00:00:00", "updated_at": "2018-02-09 00:00:00", "pivot": { "model_id": 1, "role_id": 1 } }] } }] }
所有在 hasOne
belongsTo
hasMany
和 belongsToMany
中定义的关系都可以通过这种方式检索。如果您想添加一些限制,您可以在实体中添加 availableIncludes
数组。如果是这样,即使它们在关系中定义,也只解析数组中的键。
验证和授权
Rigger 使用 spatie/laravel-permission 作为基本验证器。Rigger 中有三个控制层:全局层、实体层和动作层。在每个层中,都存在两个关键字 authorize
和 authenticate
来控制行为。authorize
描述了需要哪些权限或角色,而 authenticate
确定用户是否需要登录。
authenticate
只能设置 true
或 false
authorize
'authorized' => [ 'role' => 'admin', 'permission' => 'update-user' ]
role
和 permission
都受支持。您还可以在权限中设置占位符 ${action}
和 ${resource}
。例如,如果您在用户项中将 permission
设置为 ${action}-${resource}
,则在访问 GET /users
时,需要权限 index-user
。
三个控制层
在访问特定操作时,它会检查该资源是否有详细的操作控制,如果有,则解析它。如果没有,它将使用实体控制。但是,如果实体控制不存在,则将激活全局控制,该控制位于 rigger.php
。