2016-01-15 272 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