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)。有关更多信息,请参阅许可文件。