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