2016-01-15 240 views
1

我想使用自定义验证错误消息创建自定义验证规则。为此,我创建了一个规则: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; 
} 

全部工作正常t问题是我的自定义消息app_id.isValidTag不工作,即使所有其他消息都正常工作。

请告诉我我在这里或在Laravel 5.2中丢失的信息,显示信息有一些变化。任何想法将不胜感激。

回答

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 //如果您未自定义供应商使用供应商/ 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 
    
+1

您还可以添加错误信息直接在函数中使用''validator-> setCustomMessage([''=>'<错误信息>'])'' – arleslie

+0

@ user3632055如果你在那里我需要一点帮助 – lewis4u

+0

@ lewis4u whats up? – user3632055