2016-08-05 122 views
1

我有一個表複選框作爲數組和文本框作爲數組。我想實現的是當用戶選中一個複選框時,它應該驗證輸入文本框不是空的。使用laravel中的required_with進行數組輸入時的驗證?

 
public function roombooking(Request $request) 
    { 


     $messsages = array(
     'check.required'=>'No room was selected.Please select room to proceed for booking !', 
     'txtnos.required|numeric'=>'Please enter no of persons', 
    ); 
     $rules = array(
     'check'=>'required', 
     'txtnos'=>'required_with:data', //txtnos is a array input filed and data is a array checkbox 
     ); 
     $validator = Validator::make($request->all(), $rules,$messsages 
      ); 
     if ($validator->fails()) { 

      return Redirect::back() 
       ->withErrors($validator) 
       ->withinput(); 

     } 
} 

HTML代碼

 


         
 
<table class="table table-hover" data-toggle="table" id="table" 
 
data-click-to-select="true"> 
 
    <thead> 
 
     <tr> 
 
      <th style="width:10%;" data-field="ActivityId">Select</th> 
 
      <th style="width:30%;" data-field="ActivityName">Activity Name</th> 
 
      <th style="width:30%;" data-field="Rate">Rate/Person</th> 
 
      <th style="width:30%;">Nos. of person</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody>     
 
      @foreach($loadactivity as $key=>$activity) 
 
      <tr> 
 
       <td> 
 
        <input type="checkbox" name="data[]" value="0;{!! $activity->ActivityId !!};{!! $activity->Rate !!};0;0;{!! $activity->ActivityName !!}" /> 
 
       </td> 
 
       <td>{!! $activity->ActivityName !!}</td> 
 
       <td>{!! $activity->Rate !!}</td> 
 
       <td >{!! Form::text('txtnos[]','',['class' => 'form-control small-textbox ','txtnoid'=>$activity->ActivityId]) !!}</td> 
 
      </tr> 
 
      @endforeach 
 
    
 
    </tbody> 
 
</table>

請幫我

+0

請提供表格的HTML – SebHallin

回答

1

更改您的形式:

... 
<td><input type="checkbox" name="row[{{$key}}][data]" value="0;{!! $activity->ActivityId !!};{!! $activity->Rate !!};0;0;{!! $activity->ActivityName !!}" /> 
</td> 
<td>{!! $activity->ActivityName !!}</td> 
<td>{!! $activity->Rate !!}</td> 
<td>{!! Form::text('row[{{$key}}][txtnos]','',['class' => 'form-control small-textbox ','txtnoid'=>$activity->ActivityId]) !!}</td> 
... 

所以這是唯一改變的就是數據和txtnos的名字,它會給你以下:

$exampleResult = [ 
    'row' => [ 
     // old $key as new key 
     0 => [ 
      'txtnos' => 'entered value', 
      'data' => '1', // But only if checked 
     ], 
     1 => [ 
      'txtnos' => 'entered value', 
      'data' => '1', // But only if checked 
     ], 
    ] 
]; 

驗證規則

$rules = [ 
    'row.*.txtnos' => 'required_with:row.*.data' 
]; 

在示例中,txtnos上如果data各行需要在同一行isset。

驗證消息

$messages = [ 
    'row.*.txtnos.required_with' => 'Enter a value or uncheck the checkbox..' 
]; 

重要提示:在Laravel 5.2中添加了對.*.驗證
,你沒有指定具體的版本,所以我不知道它是否會爲工作您。無論如何,還有另一種方法可以做到這一點。

對於版本< 5.2,循環輸入行並將我的示例中的*替換爲當前鍵。

+0

我已用HTML代碼更新我的問題。請檢查並告訴我如何設置規則 –

+0

它的工作原理!非常感謝你 –

+0

很好聽。請「[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)」說出_謝謝你。 – SebHallin