laravel5.1 -- 自定義驗證規則

laravel5.1提供了很是方便的驗證規則來驗證HTTP傳輸過來的數據,利用這些規則你幾乎能夠完成你想要的任何驗證。
相信多數利用laravel作過項目的朋友都已經熟練掌握了,如今我將以另外一種方式來進行自定義驗證。
這種自定義驗證在laravel 4.*中的文檔中已經寫的很是清楚,但在laravel 5.*裏卻沒有說明。如今咱們來實現它。php

假設一篇文章有幾個標籤(tags),咱們要來自定義驗證規則來驗證tagslaravel

Create a validator class

App\Services下新建一個Validationapp

<?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方法中添加:ide

<?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(..)這段代碼post

request驗證

PostRequest.php中咱們能夠這樣寫測試

return [
    'tags' => 'tags
];

由於咱們是驗證文章的字段數據,因此咱們還要提供它的title,summart,content等字段ui

<?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中測試是否成功了。 this

laravel5.1中提供的是 Validator::extend, 但咱們這樣作的好處是咱們能夠自定義驗證類,一旦註冊後,就能夠按照它的規則來進行驗證了。spa

相關文章
相關標籤/搜索