2016-10-02 67 views
0

我如何可以驗證我的其他輸入字段在Laravel 4.2這一個下拉列表中選擇其他選項之後出現?我的下拉列表中的值已經是必需的了,現在我想在我的輸入字段上應用與驗證錯誤相同的錯誤,以便兩者都是必需的!通過從下拉列表中執行第一個驗證規則,輸入字段中的第二個驗證規則將輸出錯誤!什麼是解決這個問題的最簡單的方法!如何在下拉列表中驗證我的其他選項?

<div class="row"> 

        <div class="col-lg-6 col-sm-6 col-md-6"> 



      <script type="text/javascript"> 
       function showfield(name){ 
         if(name=='Other')document.getElementById('div1').innerHTML='<input class="custom-input" placeholder="Roles" style="margin-left: 32px;" name="roles" type="text" value/>'; 

         else document.getElementById('div1').innerHTML=''; 
        } 
      </script> 



       <select id="otherField" name="role" onchange="showfield(this.options[this.selectedIndex].value)"> 
        <option value="" selected="selected">Select role</option> 
        <option value="UI/UX designers">UI/UX designers</option> 
        <option value="QA engineers">QA engineers</option> 
        <option value="Developer">Developer</option> 
        <option value="Scrum Master">Scrum Master</option> 
        <option value="CEO">CEO</option> 
        <option value="Director">Director</option> 
        <option value="Other">Other</option> 
       </select> 
        <div id="div1" class="row"> 
          <div class="col-lg-6 col-sm-6 col-md-6"></div> 
        </div> 
        <div class="col-md-6"> 
                 @if($errors->first('roles')) 
                  <div class="fe-form-error"> 
                   <div class="icon"></div> 
                   {{ $errors->first('roles') }} 
                  </div> 
                 @endif 
                 </div> 

        </div> 

                 <div class="col-md-6"> 
                 @if($errors->first('role')) 
                  <div class="fe-form-error"> 
                   <div class="icon"></div> 
                   {{ $errors->first('role') }} 
                  </div> 
                 @endif 
                 </div> 

      </div> 

我的驗證規則類:

class OnEventRegistration extends AbstractValidator { 

    protected $customRules = false; 

    protected $rules = array(
     'email'    =>  'required|email|unique:users', 
     'password'   =>  'required|min:8|confirmed', 
     'first_name'  =>  'required', 
     'last_name'   =>  'required', 
     'role'    =>  'required', 
     'roles'    =>  'required', 

    ); 
} 

回答

1

您需要使用required_if

protected $rules = array(
    'email'    =>  'required|email|unique:users', 
    'password'   =>  'required|min:8|confirmed', 
    'first_name'  =>  'required', 
    'last_name'   =>  'required', 
    'role'    =>  'required', 
    // This says required only if role = 'Other' 
    'roles'    =>  'required_if:role,Other', 
); 

你可能會還需要有條件地顯示,使得它實際上是公認的表單中的DOM的一部分,你的roles輸入的另一種方法。

<script> 
function showfield(el) { 
if (el.value == 'Other') { 
    document.getElementById('roles').style.display = 'block'; 
} else { 
    document.getElementById('roles').style.display = 'none'; 
} 
</script> 

<select id="otherField" name="role" onchange="showfield(this)"> 
    <!-- options --> 
</select> 

<input id="roles" style="display: none; margin-left: 32px;" name="roles" type="text" placeholder="Roles" class="custom-input"> 
+0

嘗試已經我得到一個** SQLSTATE [23000] **:完整性約束違規:1048列「角色」不能爲空 –

+0

這不是在所有涉及到的任何上面的代碼,但這個解決您需要更改數據庫中的「角色」列以允許爲空。如果這是通過遷移創建的,那麼:'$ table-> string('roles') - > nullable();'或者在SQL中:http://stackoverflow.com/questions/212939/how-do-i-modify -a-mysql-column-to-allow-null 在默認情況下,MySQL列可以爲空。在使用內置遷移的Laravel中,您需要指定哪些是可空的。 – tptcat

+0

工作!!非常感謝您的努力!欣賞它。 –