sands / laravel-controller-validation
Laravel 5+ 的自动控制器验证
This package is not auto-updated.
Last update: 2024-09-14 19:31:20 UTC
README
# Sands\Validation
Laravel 5+ 的自动控制器验证
## 安装
$ composer require sands/laravel-controller-validation
在 config/app.php
文件中,将 Sands\Validation\ValidationServiceProvider
添加到 providers
数组中
'providers' => [ ... Sands\Validation\ValidationServiceProvider::class, ... ]
在 app/Http/Kernel.php
文件中,将 Sands\Validation\ValidationMiddleware
添加到 $routeMiddlware
数组中
protected $routeMiddleware = [ ... 'validation' => Sands\Validation\ValidationMiddleware::class, ... ]
## 使用
假设我们有一个资源控制器用于管理应用程序用户,并在路由文件中注册了该控制器的路由
Route::resource('users', 'UsersController');
首先,让我们为 UsersController 创建验证文件
$ artisan make:validation UsersController --resource
此命令将在 app/Validations
文件夹中生成一个新文件 UsersControllerRules.php
。如果提供了 --resource
参数,验证文件将自动包含 store
和 update
方法。
验证方法必须返回一个包含 Laravel 验证规则 的数组。
最后,将验证规则与控制器关联如下
// in app/Http/Controllers/UsersController.php public function __construct() { $this->middleware('validation'); }
在调用 UsersController 中的 store
或 update
方法之前,Laravel 将根据 UsersControllerRules@store
或 UsersControllerRules@update
方法返回的规则运行验证。
或者,您可以通过路由组在路由文件中添加中间件
Route::group(['middleware' => ['validation']], function() { Route::resource('users', 'UsersController'); });
您还可以定义验证中间件将从中获取规则的类
// in app/Http/Controllers/UsersController.php use App\Validations\UsersControllerRules; ... public function __construct() { $this->middleware('validation:' . UsersControllerRules::class); }
如果请求不满足任何验证规则,用户将被重定向回包含验证错误的 $errors
数组。错误可以如下显示给用户
@if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{$error}}</li> @endforeach </ul> </div> @endif
如果请求需要 JSON,如 Request::wantsJson()
确定的那样,中间件将返回 HTTP 错误 422
,并带有如下 JSON 有效负载
{ "errors": [validation errors] }
默认情况下,验证规则将针对由 app('request')->all()
返回的所有用户输入进行验证。如果您想覆盖要验证的数据,您可以在验证规则文件中定义方法。例如,如果我们想在 UsersControllerRules 中调用 store
验证方法时仅验证用户名,我们可以定义一个 storeData
方法,如下所示
// app/Validations/UsersControllerRules.php ... protected function storeData($request, $params) { return $request->only('username'); } protected function store($request, $params) { return [ 'username' => 'required|unique:users' ]; }
## 监听器
此包监听 sands.generator::MakeController
事件并创建验证规则。
## 事件
此包在创建新的验证规则文件时触发 sands.validation::MakeRules
事件。事件的第一个参数是 ControllerNameRules
,其中 ControllerName
是控制器的名称。
## MIT 许可证
版权所有 (c) 2016 Sands Consulting Sdn Bhd
以下对本软件和相关文档(统称为“软件”)的副本的任何人,无论是否免费获得,均授予在本软件上不受限制地处理的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许有权获得软件的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于关于适用性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权持有人不应对任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其他,与软件或其使用或其他相关。