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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值