2016-03-23 8 views
4

Ich habe ein Formular in Laravel, in dem ich drei Textfelder basierend auf einem Kontrollkästchen validieren möchte. Es ist ein Edit-Benutzerformular, in dem ich nur das Passwort aktualisieren möchte, wenn ich ja wähle. Dies ist die Form meiner Meinung nach:Bedingte Validierung, wenn das Kontrollkästchen ausgewählt wurde 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> 

ich dann eine Anforderung haben EditAccountRequest wie so genannt:

<?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; 
    } 
} 

Mein Problem ist, dass, wenn ich, ob das Kontrollkästchen ‚updatepasswordcheck‘ sehen wahr ist es nie funktioniert weil die Eingabe immer als Null erscheint. Weiß jemand, wie man das repariert?

Antwort

3

Ok Ich arbeitete es aus. Ich tat dies und es funktioniert:

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

Sie können folgendes tun:

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

Ich habe versucht, dies zu tun, und ich habe diesen Fehler: Ziel [App \ Http \ Requests \ Request] ist nicht instantiable. – Magearlik

+0

Sie müssen Folgendes über Ihrer Klasse und unter dem Namespace "app \ Http \ Requests \ Request;" verwenden. – user2094178

+0

Nein, das gibt immer noch einen Fehler, weil Sie innerhalb des Anfrageobjekts oder etwas sind – Magearlik

1

Ich verwende Laravel 5.5 und dieser Code funktioniert gut, mein Szenario war, wenn „Info“ drop-down ausgewählt „Ja“, dann „Firmenname“ erforderlich sein sollte.

Controller:

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

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

    ]); 
} 

Ausblick:

<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

Verwandte Themen