Laravel 5.2自定义验证消息,带有自定义验证功能

时间:2016-01-15 13:26:35

标签: validation laravel-5.2

我想创建带有自定义验证错误消息的自定义验证规则。为此,我创建了一条规则:

$rule => [
    'app_id' => 'isValidTag'
]

对于自定义消息:

$message => [
   app_id.isValidTag   => 'Not a Valid id'
];

之后我创建了服务提供商:

class CustomValidationServiceProvider extends ServiceProvider
{
    public function boot() {

    //parent::boot();

    $this->app->validator->resolver(function($transator,$data,$rules,$messages){
            return new CustomValidator($transator,$data,$rules,$messages);
        });
    }
}

我的自定义验证类是:

class CustomValidator extends Validator {
    if(empty($parameters)) {
        return true;
    }

    $conext = $parameters[0];
    $tag = Tag::where('id', $value)->where('context', $conext)->get();

    $flag = false;
    if($tag->count() > 0) {
        $flag = true;
    }       

    return $flag;
}

一切正常,但问题是app_id.isValidTag的自定义消息无法正常工作,即使所有其他消息都正常工作。

请建议我在这里或Laravel 5.2中遗漏的内容,显示消息有一些变化。任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:5)

以下是一个很棒的教程:http://itsolutionstuff.com/post/laravel-5-create-custom-validation-rule-exampleexample.html

我认为你做的是Laravel 4. *方式。这是在 Laravel 5.2 中完成的 在我的例子中,我正在制作注册授权表格,因此像AuthController.php这样的文件是预制的:

  1. AuthController.php

    Validator::make($data, [
        ...
        // add your field for validation
        'name_of_the_field' => 'validation_tag', // validation tag from validation.php
        ...
    
  2. CustomAuthProvider.php //如果您没有使用Providers / AppServiceProvider.php制作自定义提供程序

    public function boot() {
        ...
        Validator::extend('validation_tag', function($attribute, $value, $parameters, $validator) {
                // handle here your validation
                if (  your_query ) {
                    return true;
                }
                return false;
        });
    
  3. validation.php

    ...
    // add your validation tag and message to be displayed
    'validation_tag'           => 'The field :attribute isn't good',
    ...
    
  4. file.blade.php //在页面末尾添加所有错误添加

    @if (count($errors) > 0)
          <div class="alert alert-danger">
                 <ul>
                       @foreach ($errors->all() as $error)
                             <li>{{ $error }}</li>
                       @endforeach
                 </ul>
           </div>
    @endif