laravel5.1
提供了很是方便的驗證規則來驗證HTTP
傳輸過來的數據,利用這些規則你幾乎能夠完成你想要的任何驗證。
相信多數利用laravel
作過項目的朋友都已經熟練掌握了,如今我將以另外一種方式來進行自定義驗證。
這種自定義驗證在laravel 4.*
中的文檔中已經寫的很是清楚,但在laravel 5.*
裏卻沒有說明。如今咱們來實現它。php
假設一篇文章有幾個標籤(tags
),咱們要來自定義驗證規則來驗證tags
laravel
在App\Services
下新建一個Validation
類app
<?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); } } ?>
Validation
類完成後,咱們就須要將它註冊到服務容器中
在App\Providers\AppServiceProvider.php
的boot
方法中添加: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
在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