2015-05-21 23 views
2

我使用Laravel來構建包含輸入數組的表單,並且在發生驗證錯誤時難以顯示已翻譯的屬性名稱。爲了簡單起見,我將發佈我的問題的一個簡單例子。如何在輸入數組上使用自定義驗證屬性

窗體視圖內:在形式請求

<form method="POST" action="{{ route('photo.store') }}" accept-charset="UTF-8" role="form"> 
<input name="_token" type="hidden" value="{{ csrf_token() }}"> 
<div class="row"> 
    <div class="col-lg-12"> 
     <div class="form-group{{ $errors->has('testfield') ? ' has-error' : '' }}"> 
      <label class="control-label" 
        for="testfield">{{ trans('validation.attributes.testfield') }}</label> 
      <input class="form-control" name="testfield" type="text" id="testfield" 
        value="{{ old('testfield') }}"> 
      @if ($errors->has('testfield')) 
       <p class="help-block">{{ $errors->first('testfield') }}</p> 
      @endif 
     </div> 
    </div> 
    <div class="col-lg-12"> 
     <div class="form-group{{ $errors->has('testfieldarray.0') ? ' has-error' : '' }}"> 
      <label class="control-label" 
        for="testfieldarray-0">{{ trans('validation.attributes.testfieldarray') }}</label> 
      <input class="form-control" name="testfieldarray[]" type="text" id="testfieldarray-0" 
        value="{{ old('testfieldarray.0') }}"> 
      @if ($errors->has('testfieldarray.0')) 
       <p class="help-block">{{ $errors->first('testfieldarray.0') }}</p> 
      @endif 
     </div> 
    </div> 
    <div class="col-lg-12"> 
     <div class="form-group{{ $errors->has('testfieldarray.1') ? ' has-error' : '' }}"> 
      <label class="control-label" 
        for="testfieldarray-1">{{ trans('validation.attributes.testfieldarray') }}</label> 
      <input class="form-control" name="testfieldarray[]" type="text" id="testfieldarray-1" 
        value="{{ old('testfieldarray.1') }}"> 
      @if ($errors->has('testfieldarray.1')) 
       <p class="help-block">{{ $errors->first('testfieldarray.1') }}</p> 
      @endif 
     </div> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-lg-12"> 
     <input class="btn btn-primary" type="submit" value="Gravar"> 
    </div> 
</div> 

規則功能:

public function rules() { 
    $rules = [ 
     'testfield' => array('required'), 
    ]; 

    foreach ($this->request->get('testfieldarray') as $key => $val) { 
     $rules['testfieldarray.' . $key] = array('required'); 
    } 

    return $rules; 
} 

郎/ EN/validation.php

'attributes' => [ 
    'testfield' => 'Test Field', 
    'testfieldarray' => 'Test Field Array', 
], 

驗證執行correc就像錯誤信息一樣。錯誤消息中唯一的問題是顯示的屬性的名稱。在兩個數組輸入中,消息中插入的屬性名稱是'testfieldarray.0'和'testfieldarray.1',而不是'Test Field Array'。我已經嘗試添加語言文件'testfieldarray.0'=>'測試字段數組','testfieldarray.1'=>'測試字段數組',但消息保持不變。有沒有辦法正確傳遞屬性名稱?

+0

你可以循環雖然對於每一個 'testfieldarray'自定義消息數組在驗證中,就像您使用規則一樣。谷歌搜索1秒後http://ericlbarnes.com/laravel-array-validation/ – oBo

+0

不應該在''testfieldarray'之前添加'attributes.'。 。 $ key' – saadel

回答

0

使用custom error messages你的父類的方法裏面....

public function <metod>(Request $request) { 
    $rules = [ 
     'testfield' => 'required' 
    ]; 
    $messages = []; 

    foreach ($request->input('testfieldarray') as $key => $val) { 
     $rules['testfieldarray.' . $key] = 'required'; 
     $messages['testfieldarray.' . $key . '.required'] = 'Test field '.$key.' is required'; 
    } 

    $validator = Validator::make($request->all(), $rules,$messages); 
     if ($validator->fails()) { 
      $request->flash(); 
      return redirect() 
       ->back() 
       ->withInput() 
       ->withErrors($validator); 
     } 
    } 
} 
1

剛纔看到的例子中添加自定義規則排列的整型值檢查

打開文件

/resources/lang/en/validation.php 

然後添加自定義消息。

// add it before "accepted" message. 
'numericarray'   => 'The :attribute must be numeric array value.', 

再次打開另一個文件來添加自定義驗證規則。

/app/Providers/AppServiceProvider.php 

因此,在引導功能中添加自定義驗證碼。

public function boot() 
{ 
    $this->app['validator']->extend('numericarray', function ($attribute, $value, $parameters) 
    { 
     foreach ($value as $v) { 
      if (!is_int($v)) { 
       return false; 
      } 
     } 
     return true; 
    }); 
} 

現在你可以使用數組的整型值檢查的numericarray

$this->validate($request, [ 
      'input_filed_1' => 'required', 
      'input_filed_2' => 'numericarray' 
     ]); 

----------- 祝您好運的--------------

相關問題