laravel5.1 -- 自定义验证规则

laravel5.1提供了非常方便的验证规则来验证HTTP传输过来的数据,利用这些规则你几乎可以完成你想要的任何验证。
相信多数利用laravel做过项目的朋友都已经熟练掌握了,现在我将以另一种方式来进行自定义验证。
这种自定义验证在laravel 4.*中的文档中已经写的非常清楚,但在laravel 5.*里却没有说明。现在我们来实现它。

假设一篇文章有几个标签(tags),我们要来自定义验证规则来验证tags

Create a validator class

App\Services下新建一个Validation

<?php
namespace App\Services;

use Illuminate\Validation\Validator;

class Validation extends Validator{
    public function ValidateTags($attribute, $value, $parameters){

        return preg_match("/^[A-Za-z0-9-éèàù]{1,50}?(,[A-Za-z0-9-éèàù]{1,50})*$/", $value);
    }
}
?>

Register the custom validator

Validation类完成后,我们就需要将它注册到服务容器中
App\Providers\AppServiceProvider.phpboot方法中添加:

<?php
namespace App\Providers;

use Validator;
use App\Services\Validation;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Validator::resolver(function($translator, $data, $rules, $messages)
        {
            return new Validation($translator, $data, $rules, $messages);
        });
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

boot方法中添加了Validator::resolver(..)这段代码

request验证

PostRequest.php中我们可以这样写

return [
    'tags' => 'tags
];

因为我们是验证文章的字段数据,所以我们还要提供它的title,summart,content等字段

<?php

namespace App\Http\Requests;

use App\Http\Models\Post;
use App\Http\Requests\Request;

class PostRequest extends Request
{
    /**
     * 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()
    {
        $id = $this->blog ? ',' . $this->blog : '';
        
        return [
            'title' =>  'required|max:255',
            'slug'  =>  'required|unique:posts,slug' . $id,
            'summary' => 'required|max:65000',
            'content' => 'required|max:65000',
            'tags' => 'tags'
        ];
    }
}

完成之后,自己就可以在Controller中测试是否成功了。

laravel5.1中提供的是 Validator::extend, 但我们这样做的好处是我们可以自定义验证类,一旦注册后,就可以按照它的规则来进行验证了。

    原文作者:Romolo
    原文地址: https://segmentfault.com/a/1190000008920196
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞