sands/laravel-controller-validation

Laravel 5+ 的自动控制器验证

1.0.2 2016-09-11 13:07 UTC

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 参数,验证文件将自动包含 storeupdate 方法。

验证方法必须返回一个包含 Laravel 验证规则 的数组。

最后,将验证规则与控制器关联如下

// in app/Http/Controllers/UsersController.php

public function __construct()
{
    $this->middleware('validation');
}

在调用 UsersController 中的 storeupdate 方法之前,Laravel 将根据 UsersControllerRules@storeUsersControllerRules@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

以下对本软件和相关文档(统称为“软件”)的副本的任何人,无论是否免费获得,均授予在本软件上不受限制地处理的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许有权获得软件的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于关于适用性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权持有人不应对任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其他,与软件或其使用或其他相关。