2016-03-22 37 views
0

我有一個很長很複雜的表單,有幾個'條件'字段 - 字段B只顯示字段A是否標記爲'是'。Laravel 4:訪問來自重定向的值' - > withInput()'

這裏的HTML:

<div class="{{ $errors->has('happy') ? ' has-error' : false }}"> 
    {{Form::label('happy', 'Are you happy?')}} 
    {{Form::select('happy', array('' => '--', 'Yes' => 'Yes', 'No' => 'No'),(!empty($input['happy']) ? $input['happy'] : null), ['class'=>'dependent']);}} 
</div> 
<div class="{{ !empty($input['happy']) && $input['happy'] == 'Yes' ? null : 'hidden'}} dependent" data-dependent-field="happy" data-dependent-value="Yes"> 
    {{Form::label('second-field', 'Only asked if you\'re happy')}} 
    {{Form::textarea('second-field',!empty($input['second-field']) ? $input['second-field'] : null)}} 
</div> 

的問題是,如果有第二場驗證錯誤,原始輸入不被認可時提交表單,並仍在增加了hidden類到第二組字段。

{{ !empty($input['happy']) && $input['happy'] == 'Yes' ? null : 'hidden'}} 

該代碼在重新載入帶有要編輯的數據的表單時起作用,但當驗證錯誤正在發送時不起作用。驗證碼看起來像這樣:

 if($validation->fails()){ 
      return Redirect::back()->withInput()->withErrors($validation->errors())->with(['flash_message'=>'Please check your inputs again.']); 
     } 

我猜我沒有正確引用返回數據,但無法弄清楚我哪裏出錯了。

我已經使用jQuery來擴展字段,當輸入發生變化時,但是在驗證錯誤後重新加載時,這並不關心字段。

編輯更多CLAIRTY:

下面是一個例子。如果我選擇是,但將「爲什麼」答案留空並且它是必填字段,則當Laravel執行back()->withErrors()位時,文本區域不顯示在屏幕上。

<div class="row {{ $errors->has('happy') ? ' has-error' : false }}"> 
    {{Form::label('happy', 'Field Label', ['class'=>'span12'])}} 
    <div class="span3"> 
     {{Form::select('happy', array('' => '--', 'Yes' => 'Yes', 'No' => 'No'),(!empty($input['happy']) ? $input['happy'] : null), ['class'=>'dependent']);}} 
    </div> 
</div> 

<div class="row"> 
    <div class="span12"> 
     <div class="{{ !empty($input['happy']) && $input['happy'] == 'No' ? null : 'hidden'}} dependent" data-dependent-field="happy" data-dependent-value="No"> 

      <div {{ $errors->has('why-not-happy') ? ' has-error' : false }}"> 
       {{Form::label('why-not-happy', 'Why aren\'nt you happy?')}} 
       {{Form::textarea('why-not-happy',!empty($input['why-not-happy']) ? $input['why-not-happy'] : null)}} 
      </div> 

     </div> 
    </div> 
</div> 
+0

你能告訴我在接受表格值的控制器中的功能嗎? – Vagabond

回答

0

問題的一個解決方案是它可以通過jQuery來解決,因爲這是您在提交表單之前需要完成的事情。 $ input ['happy']只有在您提交後纔會獲得一個值。

重新找到解決問題的辦法。

您可以在視圖的末尾或單獨的.js文件中包含此代碼片段。

jQuery代碼可能如下:

<script type='text/javascript'> 
    $(function() { 
    //you may assign an id to the dropdown, just in case, and mention it as a selector 
    $('select.dependent').change(function(d){ 
     d.preventDefault(); 
     var selectValue = this.val(); 
     if(selectValue !='happy' || selectValue.length === 0){ 
      //Whatever you want to achieve when the selected value is NOT happy or empty 
      $('div.dependent').addClass('hidden'); 
     }  
    }); 
    }); 
</script> 

我希望它能幫助。如果沒有,請告訴我。

+0

謝謝,但這一點我已經有了。當Laravel返回帶有錯誤的表單時,隱藏部分中的字段未顯示,因爲它沒有拾取輸入。讓我更新一個更好的例子... – TH1981