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.php
的boot
方法中添加:
<?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
, 但我们这样做的好处是我们可以自定义验证类,一旦注册后,就可以按照它的规则来进行验证了。