2015-06-16 16 views
11

Ich versuche Laravel 5.1 Formular Validierung zu verwenden, um zu autorisieren, wenn die Anfrage vom Eigentümer ist. Die Validierung wird verwendet, wenn der Benutzer versucht, einen Teil der Tabelle clinics über die show.blade.php zu aktualisieren.Laravel 5 Formular Anfrage Validierung Rückkehr verbotener Fehler

Mein aufgebaut bisher:

routes.php:

Route::post('clinic/{id}', 
    array('as' => 'postUpdateAddress', 'uses' => '[email protected]')); 

ClinicController.php:

public function postUpdateAddress($id, 
     \App\Http\Requests\UpdateClinicAddressFormRequest $request) 
    { 
     $clinic    = Clinic::find($id); 
     $clinic->save(); 

     return Redirect::route('clinic.index'); 
    } 

UpdateClinicAddressFormRequest.php:

public function authorize() 

    { 
     $clinicId = $this->route('postUpdateAddress'); 

     return Clinic::where('id', $clinicId) 
     ->where('user_id', Auth::id()) 
     ->exists(); 
    } 

Show.blade.php

{!! Form::open(array('route' => array('postUpdateAddress', $clinic->id), 'role'=>'form')) !!} 

{!! Form::close() !!} 

Wenn ich dd($clinicId) innerhalb der authorise Funktion, es gibt null, so dass ich denke, das ist, wo das Problem liegt!

Irgendwelche Hilfe, warum auf einreichen es sagt "verboten" wäre sehr geschätzt.

Antwort

27

Sie erhalten Forbidden Fehler weil authorize() Methode der Form-Anforderung falsch Rückkehr:

Das Problem ist folgendes: $clinicId = $this->route('postUpdateAddress');

Um eine Route Parameterwert Zugriff auf Formular Fordert Sie dies tun könnte :

$clinicId = \Route::input('id'); //to get the value of {id}

so authorize() sollte wie folgt aussehen:

public function authorize() 
{ 
    $clinicId = \Route::input('id'); //or $this->route('id'); 

    return Clinic::where('id', $clinicId) 
    ->where('user_id', Auth::id()) 
    ->exists(); 
} 
+0

Vielen Dank für Ihre Hilfe! Etwas so einfaches. – Ben

+0

Willkommen. Glückliche Kodierung – Digitlimit

2

ich hinzufügen, um diesen Besitzer Bestätigung() -Methode in Antrag zu genehmigen und arbeiten

public function authorize() 
{ 
    return \Auth::check(); 
}