PHPackages                             guirong/laravel-validate - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. guirong/laravel-validate

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

guirong/laravel-validate
========================

The use of the Larravel validator and validation scenarios

1.0.0(2y ago)0151MITPHPPHP &gt;=5.6.0

Since Aug 9Pushed 2y ago1 watchersCompare

[ Source](https://github.com/GuiRong2969/laravel-validate)[ Packagist](https://packagist.org/packages/guirong/laravel-validate)[ Docs](https://github.com/GuiRong2969/laravel-validate)[ RSS](/packages/guirong-laravel-validate/feed)WikiDiscussions master Synced today

READMEChangelogDependenciesVersions (2)Used By (0)

PHP Validate
============

[](#php-validate)

[![License](https://camo.githubusercontent.com/072f430c917818292178a5f328b20092a4ce69a5b8f25543dfc11cc446839433/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f477569526f6e67323936392f6c61726176656c2d76616c6964617465)](LICENSE)[![Php Version](https://camo.githubusercontent.com/9015f519b985fcc4381e308cf26852b2229de233c0749f19fbdd084cb1e575cc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344352e362e302d627269676874677265656e)](https://www.php.net/ChangeLog-5.php#PHP_5_6)[![GitHub tag (latest by date)](https://camo.githubusercontent.com/5eb9855bdeed9c1d889ee9464f807b6806e0c2fc200e8cf8318e97699e1d4629/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f7461672f477569526f6e67323936392f6c61726176656c2d76616c6964617465)](https://camo.githubusercontent.com/5eb9855bdeed9c1d889ee9464f807b6806e0c2fc200e8cf8318e97699e1d4629/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f7461672f477569526f6e67323936392f6c61726176656c2d76616c6964617465)[![Coverage Status](https://camo.githubusercontent.com/1e5ed8ec8b258be33b591ab8873ca050f5ffa17680fb2cce29cb0ab60ed29436/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f477569526f6e67323936392f6c61726176656c2d76616c69646174652f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/GuiRong2969/laravel-validate?branch=master)[![GitHub all releases](https://camo.githubusercontent.com/5cba94cc1accc035e766d2eff019c032144c3d91190487addf5f42299db57250/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f646f776e6c6f6164732f477569526f6e67323936392f6c61726176656c2d76616c69646174652f746f74616c)](https://camo.githubusercontent.com/5cba94cc1accc035e766d2eff019c032144c3d91190487addf5f42299db57250/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f646f776e6c6f6164732f477569526f6e67323936392f6c61726176656c2d76616c69646174652f746f74616c)

`Laravel` 验证器以及验证场景的使用。

- 在laravel内置的验证器基础上，扩展了验证场景
- 解决 `FormRequest` 验证表单文件过多的问题

项目地址
----

[](#项目地址)

- **github**

> **注意：**

- 版本要求 `php >= 5.6.0`

安装
--

[](#安装)

```
composer require guirong/laravel-validate
```

使用
--

[](#使用)

- 以地址簿的 新增，编辑，删除 功能演示

创建地址簿验证器 `\App\Http\Requests\AddressRequest`

```
php artisan make:request AddressRequest
```

***`AddressRequest` 验证器：***

写入内容

```
namespace App\Http\Requests;

use Guirong\Laravel\Validate\FormRequest;

class AddressRequest extends FormRequest
{
    /**
     * Auto validation
     *
     * @var boolean
     */
    protected $autoValidate = true;

    /**
     * Strictly verify scene
     * 自动校验时，严格验证场景`scene`是否存在；设置 false 表示场景不存在的情况下校验所有规则
     *
     * @var boolean
     */
    protected $sceneStrict = true;

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'id' => 'required',
            'province' => 'required',
            'city' => 'required',
            'county' => 'required',
            'address' => 'required',
        ];
    }

    /**
     * Get the validation messages that apply to the request.
     *
     * @return array
     */
    public function messages(){
        return [
            'id.required' => 'id必填',
            'province.required' => '省份必填',
            'city.required' => '城市必填',
            'county.required' => '区县必填',
            'address.required' => '详细地址必填',
        ];
    }

    /**
     * 定义场景规则
     *
     * @return array
     */
    public function scene()
    {
        return [
            // 地址新增时，校验以下字段
            'create' => [
                'province', 'city', 'county', 'address'
            ],

            // 地址编辑时，校验以下字段
            'update' => [
                'id', 'province', 'city', 'county', 'address'
            ],

            // 地址删除时，校验以下字段
            'delete' => [
                'id'
            ],
        ];
    }
}
```

接下来在控制器内使用
----------

[](#接下来在控制器内使用)

创建地址簿控制器 `\App\Http\Controllers\AddressController`

```
php artisan make:controller AddressController
```

***`AddressController` 控制器：***

```
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AddressController extends Controller
{

}
```

***验证器的调用方式有三种，分别以地址簿的 `新增，编辑，删除` 三种场景演示：***

***`新增`：***

> 控制器`AddressController` 的`create`方法注入依赖时，自动绑定验证器`AddressRequest`中的同名 `create` 场景进行校验

```
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AddressController extends Controller
{
    public function create(AddressRequest $request)
    {
        // ...校验通过后处理业务
    }

}
```

***`编辑`：***

> 控制器`AddressController` 的 `edit` 方法中，指定验证器`AddressRequest`中的 `update` 场景进行校验

```
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AddressController extends Controller
{
    public function edit(AddressRequest $request)
    {
        $request->validate('update');

        // 或者
        // $request->setScene('update')->validate();

        // ...校验通过后处理业务
    }

}
```

验证器`AddressRequest` 关闭自动校验， `autoValidate` 修改为 false，

> 注意：关闭自动校验后，`新增`中的函数场景自动绑定和 `删除` 中的路由场景绑定将会失效

```
namespace App\Http\Requests;

use Guirong\Laravel\Validate\FormRequest;

class AddressRequest extends FormRequest
{
    /**
     * Auto validation
     *
     * @var boolean
     */
    protected $autoValidate = false;

}
```

***`删除`：***

> 定义路由，指定校验场景为 `delete` , 在控制器`AddressController` 的`del`方法注入依赖时，将自动绑定验证器`AddressRequest`中的 `delete` 场景进行校验

```
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AddressController extends Controller
{
    public function del(AddressRequest $request)
    {
        // ...校验通过后处理业务
    }

}
```

在 `app\Providers\AppServiceProvider.php` boot 下面添加 `scene(场景方法)`

```
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // Route 路由自定义scene(场景方法)
        \Illuminate\Routing\Route::macro('scene', function ($scene = null) {
            $action = \Illuminate\Routing\Route::getAction();
            $action['_scene'] = $scene;
            \Illuminate\Routing\Route::setAction($action);
        });
    }
```

来看看这里的路由怎么写的吧

```
// 这里我们使用的验证场景是 delete
Route::post('/address/del', [\App\Http\Controllers\AddressController::class, 'del'])->scene('delete');
```

### 添加路由

[](#添加路由)

在 `route\api.php` 内添加

```
Route::post('/address/create', [\App\Http\Controllers\AddressController::class, 'create']);

Route::post('/address/edit', [\App\Http\Controllers\AddressController::class, 'edit']);

Route::post('/address/del', [\App\Http\Controllers\AddressController::class, 'del'])->scene('delete');
```

自定义验证规则
-------

[](#自定义验证规则)

### 方法1、遵循laravel框架内置能力，使用扩展

[](#方法1遵循laravel框架内置能力使用扩展)

注册自定义验证规则的方式是使用 Validator 门面上的 extend 方法。我们在某个服务提供者（如 AppServiceProvider）中使用该方法注册一个自定义验证规则：

```
