2016-03-23 9 views
4

Laravelには、チェックボックスに基づいて3つのテキストフィールドを検証するフォームがあります。私が「はい」を選択した場合にのみ、パスワードを更新したいユーザーの編集フォームです。これが私の見解では形式です:チェックボックスをオンにした場合の条件付きの検証laravel

<section> 
     <div class="form"> 
      <h1>Edit: {!! $user->name !!}</h1> 
      {!! Form::model($user, ['method' => 'PATCH', 'action' => ['[email protected]', $user->id], 'files' => true]) !!} 
       <p>Name: {!! Form::text('name') !!} 
       <p>Email: {!! Form::text('email') !!} 
       <p>Update Password? (tick for yes) &nbsp; {!! Form::checkbox('updatepasswordcheck', 0, false) !!} 
       <p>Old Password: {!! Form::password('oldpassword') !!} 
       <p>New Password: {!! Form::password('newpassword') !!} 
       <p>New Password Confirm: {!! Form::password('newpasswordconfirm') !!} 
       @if($user->role_id == 1) 
        <p> User Role: {!! Form::select('user_type', ['admin', 'guest'], '1') !!} 
       @else 
        <p> User Role: {!! Form::select('user_type', ['admin', 'guest'], '0') !!} 
       @endif 
       <p>{!! Form::submit('Update') !!} 
      {!! Form::close() !!} 
      @include ('errors.list_errors') 
     </div> 
    </section> 

そうのようなEditAccountRequest呼ばリクエスト持って、私はそれから:

<?php 

namespace App\Http\Requests; 

use App\Http\Requests\Request; 

class EditAccountRequest extends Request 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 


     if($this->inputs['updatepasswordcheck']) 
     { 
      $rules['oldpassword'] = 'required'; 
      $rules['newpassword'] = 'required'; 
      $rules['newpasswordconfirm'] = 'required'; 
     } 
     $rules['name'] = 'required|min:3'; 
     $rules['email'] = 'required|email'; 

     return $rules; 
    } 
} 

を私の問題は、私が見たときに、チェックボックス「updatepasswordcheck」がtrueの場合はそれが動作しないことです入力は常にnullとして表示されるためです。誰でもこれを修正する方法を知っていますか?

答えて

3

[OK]を、私はそれを働きました。私はこれをしなかったし、それが動作します:

public function rules() 
{ 
     if($this->has('updatepasswordcheck')) 
     { 
      $rules['oldpassword'] = 'required'; 
      $rules['newpassword'] = 'required'; 
      $rules['newpasswordconfirm'] = 'required'; 
     } 
     $rules['name'] = 'required|min:3'; 
     $rules['email'] = 'required|email'; 

     return $rules; 
} 
2

次の操作を行うことができます:

public function rules(Request $request) 
{ 
    if($request->has('updatepasswordcheck') 
    { 
     $rules['oldpassword'] = 'required'; 
     $rules['newpassword'] = 'required'; 
     $rules['newpasswordconfirm'] = 'required'; 
    } 
    $rules['name'] = 'required|min:3'; 
    $rules['email'] = 'required|email'; 

    return $rules; 
} 
+0

私はこれをやってみましたし、私はこのエラーを得た:ターゲットは、[アプリケーション\のHttp \は\リクエストを要求]インスタンス化ではありません。 – Magearlik

+0

あなたのクラスの上で、ネームスペース 'use App \ Http \ Requests \ Request;の下に次のものが必要です。 – user2094178

+0

依頼オブジェクトや何かの中にいるので、依然としてエラーが返ってきません。 – Magearlik

1

私はLaravel 5.5を使用していますし、このコードは正常に動作し、「はい」そして「会社名」を選択し、「会社情報」のドロップダウンが要求されなければならない場合、私のシナリオでした。

コントローラー:

protected function validator(array $data) 
{ 
    return Validator::make($data, [ 

     'company_name' => 'required_if:is_company,1', 

    ]); 
} 

ビュー:

<label class="control-label">Company Info</label> 
<select id="is_company" class="form-control" name="is_company"> 
     <option value="0">No</option> 
     <option value="1">Yes</option> 
</select> 


<label class="control-label">Company Name</label> 
<input type="text" class="form-control" name="company_name"> 

More Detail