matt-daneshvar/rest
Laravel 5 资源控制器的通用实现
Requires (Dev)
- illuminate/database: 5.*
- illuminate/http: 5.*
- orchestra/testbench: ^3.8
- phpunit/phpunit: ^8.2
This package is auto-updated.
Last update: 2024-08-29 04:37:10 UTC
README
Laravel 资源控制器的通用实现。
通过假设一些约定,这个包负责处理基于基控制器的 CRUD(创建、读取、更新和删除)操作的重复实现,您可以完全自定义和扩展到您喜欢的程度。
安装
使用composer要求这个包
composer require matt-daneshvar/rest
使用
扩展 ResourceController 并指定一个 $resource。可选地定义一个 $rules 属性,在 store 和 update 操作之前强制执行验证。
<?php use App\Task; use MattDaneshvar\ResourceController\ResourceController; class TasksController extends ResourceController { protected $resource = Task::class; protected $rules = ['name' => 'required|max:200']; }
上面的示例中的 TasksController 现在将具有所有 CRUD 动作的通用实现。这包括
- 一个返回
tasks.create视图的create方法。 - 一个返回注入相关
Task模型的tasks.show视图的show方法。 - 一个返回
tasks.create视图的create方法。 - 一个验证请求与
$rules的store方法,持久化Task对象,并将用户重定向回对应于TasksController@index动作的 URL。 - 一个返回注入相关
Task模型的tasks.edit视图的edit方法。 - 一个验证请求与
$rules的update方法,更新相关Task对象,并将用户重定向回对应于TasksController@index动作的 URL。 - 一个删除相关
Task对象并将用户重定向回对应于TasksController@index动作的 URL 的destory方法。
如果验证失败,则使用所有输入和错误将用户重定向回 back() 并将它们闪现到会话中。
路由
此包旨在匹配 Laravel 的资源控制器。为该控制器创建路由规则很简单
Route::resource('tasks', 'TasksController');
限制公开的 CRUD 操作
虽然扩展 ResourceController 会自动在您的控制器中包含所有 CRUD 操作,但您可能希望限制特定资源可用的操作。您可以通过限制应用程序中公开的路由来实现这一点
Route::resource('tasks', 'TasksController', ['only' => ['index', 'show']]);
验证
大多数实际应用都会在将任何内容持久化到数据库之前验证 store 和 update 请求。
在控制器上指定一个 $rules 属性,会通知 ResourceController 在 store 和 update 操作中验证用户请求是否符合这些规则。
class TasksController extends ResourceController { protected $resource = Task::class; protected $rules = ['name' => 'required|max:200']; }
如果您希望为 store 和 update 操作使用不同的规则,您可以将它们分别指定。
class TasksController extends ResourceController { protected $resource = Task::class; protected $storeRules = ['name' => 'required|max:200']; protected $updateRules = ['name' => 'required|max:200']; }
分页
在大多数情况下,应用程序的 index 将使用分页而不是一次性将模型全部放入视图中。 ResourceController 假设每页 20 个项目。要更改此数字,请定义 $perPage 属性,或将它设置为 null 以完全禁用分页。
class TasksController extends ResourceController { protected $resource = Task::class; protected $perPage = 10; }
其他配置
虽然假设一组默认约定,并具有合理的默认值以最大限度地减少大多数情况下的代码重复,但此包还包含大量配置选项,以便在需要时覆盖默认行为。
class TasksController extends ResourceController { /** * The resource class name. * * @var string */ protected $resource = ''; /** * The number of models to return for pagination. * * @var int|null */ protected $perPage = 20; /** * Path to all views for this controller (dot-separated path from views directory). * * @var string */ protected $viewsPath = null; /** * Views for different resource actions. * * @var array */ protected $views = []; /** * Validation rules. * * @var array */ protected $rules = []; /** * Validation rules for store action. * * @var array */ protected $storeRules = null; /** * Validation rules for update action. * * @var array */ protected $updateRules = null; }
许可
MIT 许可证(MIT)。有关更多信息,请参阅许可文件。