Laravel 5 资源控制器的通用实现

v2.0.1 2019-08-18 13:19 UTC

This package is auto-updated.

Last update: 2024-08-29 04:37:10 UTC


README

Packagist Version Build Status GitHub

Laravel 资源控制器的通用实现。

通过假设一些约定,这个包负责处理基于基控制器的 CRUD(创建、读取、更新和删除)操作的重复实现,您可以完全自定义和扩展到您喜欢的程度。

安装

使用composer要求这个包

composer require matt-daneshvar/rest

使用

扩展 ResourceController 并指定一个 $resource。可选地定义一个 $rules 属性,在 storeupdate 操作之前强制执行验证。

<?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 方法。
  • 一个验证请求与 $rulesstore 方法,持久化 Task 对象,并将用户重定向回对应于 TasksController@index 动作的 URL。
  • 一个返回注入相关 Task 模型的 tasks.edit 视图的 edit 方法。
  • 一个验证请求与 $rulesupdate 方法,更新相关 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']]);

验证

大多数实际应用都会在将任何内容持久化到数据库之前验证 storeupdate 请求。

在控制器上指定一个 $rules 属性,会通知 ResourceControllerstoreupdate 操作中验证用户请求是否符合这些规则。

class TasksController extends ResourceController
{
  protected $resource = Task::class;

  protected $rules = ['name' => 'required|max:200'];
}

如果您希望为 storeupdate 操作使用不同的规则,您可以将它们分别指定。

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