2016-05-30 19 views
0

Ich versuche, ein einfaches Formular mit dem Validator von Laravel zu validieren. Die Validierung funktioniert einwandfrei, aber ich kann keine Fehler anzeigen. Form und Controller sehen so aus.Laravel 5.2 Validierungsfehler anzeigen

Formular

<h3>Add a New Team</h3> 

<form method="POST" action="/teams"> 

    <input type="hidden" name="_token" value="{{ csrf_token() }}"> 

    <div class="form-group"> 
     <input class="form-control" name="team_name" value="{{ old('team_name') }}" /> 
    </div> 

    <div class="form-group"> 
     <button type="submit" class="btn bg-primary">Add Team</button> 
    </div>  
</form> 

@if(count($errors)) 
    <div class="alert alert-danger"> 
     <ul> 
      @foreach($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 

Controller-Methode

public function store(Request $request) { 

    $this->validate($request, [ 

     'team_name' => 'required|min:10' 

    ]); 

    $team = new Team; 
    $team->team_name = $request->team_name; 
    $team->save(); 

    return back(); 
} 

Wenn sie Web-Middleware-Gruppe aus der Liste meiner Routen entfernen, Fehler zeigt in Ordnung.

Derzeit meine routes.php Datei sieht wie folgt aus

Route::group(['middleware' => ['web']], function() { 

    Route::get('/teams', '[email protected]'); 
    Route::post('/teams', '[email protected]'); 

}); 

Wie kann ich dieses Problem beheben? Jede Hilfe wäre willkommen.

Antwort

0

schreiben Code unten in Ihrem Controller:

// define rules 
    $rules = array(
    'team_name' => 'required|min:10' 
    ); 

$validator = Validator::make(Input::all(), $rules); 

if ($validator->fails()) 
{ 
    // something 
    return Redirect::back() 
      ->withErrors($validator) // send back all errors to the login form 
      ->withInput(); 
} 
else 
{ 
    // something 
    // save your data 
    $team = new Team; 
    $team->team_name = $request->team_name; 
    $team->save(); 
} 

Änderung in Ansicht Datei:

@if (count($errors) > 0) 
    <div class="alert alert-danger"> 
     <ul> 
      @foreach ($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 
+0

versucht, hat sich nichts geändert. – Tartar

+0

Ich habe meinen Beitrag bearbeitet, überprüfen Sie es –

1

Ich empfehle Ihnen Laravel Form Request Lauf

artisan make:request TeamRequest 

fügen Sie einige verwenden Logik und Regeln

class TeamRequest extends Request { 

    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; //you can put here any other variable or condition 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      // put your validation rules here 
     ]; 
    } 

} 

dann contorller Code wird wie so sein:

public function store(TeamRequest $request) 
{ 

    $team = Team::create($request->all()); 

    return back(); 
} 

Sie nicht mehr benötigen Anfrage zu bestätigen und wieder mit Fehlern und andere Sachen umleiten, Laravel wird es für Sie tun
Und Sie Code sieht sauberer und sauber aus, nicht wahr?

0

Nach ein wenig Forschung, habe ich gefunden, dass Laravel 5.2 hat eine RouteServiceProvider und es enthält Web-Middleware-Gruppe für alle Routen. Also muss ich die Web-Middleware-Gruppe nicht manuell zu meinen Routen hinzufügen. Ich habe es gerade von routes.php entfernt und Problem gelöst.

0

Wenn ich die Web-Middleware-Gruppe von meinen Routen entferne, werden Fehler angezeigt.

In Laravel 5.2 die web midddleware auf Ihre Routen in routes.php so dass keine Notwendigkeit automatisch angewendet wieder web Middleware gelten. Es ist in mapWebRoutes() Methode von RouteServiceProvider definiert.

1

Warum verwenden Sie die Validierung wie Laravel 4, während Sie Laravel 5 verwenden!

in Laravel 5 müssen Sie zuerst anfordern Klasse machen, die die Validierung Griff

php artisan make:request RequestName 

Sie die Anfrage-Klasse, die Sie in

machen

‚app/http/Anfragen/request. php‘

und in den Regeln funktionieren Sie Ihre Validierung umgehen kann

public function rules() 
    { 
     return [ 
      // put your validation rules here 
      'team_name' => 'required|min:10' 
     ]; 
    } 

schließlich in Ihrem Controller

use App\Http\Requests\RequestName; 

public function store(RequestName $request) { 
    Team::create($request->all()); 
    return Redirect::back(); 
} 

für mehr Abbildung here