Wie verwende ich den Anforderungsroutenparameter in der Laravel 5-Formularanforderung?

Lesezeit: 3 Minuten

Ich bin neu bei Laravel 5 und versuche, die neue Formularanforderung zu verwenden, um alle Formulare in meiner Anwendung zu validieren.

Jetzt stecke ich an einem Punkt fest, an dem ich eine Ressource LÖSCHEN muss, und ich habe eine DeleteResourceRequest erstellt, um nur die Autorisierungsmethode zu verwenden.

Das Problem ist, dass ich herausfinden muss, welche ID im Routenparameter angefordert wird, aber ich kann nicht sehen, wie ich das in die Autorisierungsmethode bekomme.

Ich kann die ID in der Controller-Methode wie folgt verwenden:

public function destroy($id, DeletePivotRequest $request)
{
    Resource::findOrFail($id);
}

Aber wie bringt man das in der Authorize-Methode des Form Request zum Laufen?

Das ist sehr einfach, verwenden Sie einfach die route() Methode. Angenommen, Ihr Routenparameter wird aufgerufen id:

public function authorize(){
    $id = $this->route('id');
}

  • Danke, für die schnelle Antwort. Ich habe dd($this->route(‘id’)); in der Autorisierungsmethode. Es gibt null zurück. 🙁

    – Rohan

    5. Mai 2015 um 11:53 Uhr

  • Wenn Sie Ressourcenrouten verwenden, sollte der Name des Parameters der Name der Ressource sein. Zum Beispiel post wenn du hast Route::resource('post', ...)

    – Lukasgeiter

    5. Mai 2015 um 11:55 Uhr

  • Ja, ich habe es schließlich herausgefunden, indem ich das Routenobjekt selbst abgelegt habe. Ich danke dir sehr. 🙂

    – Rohan

    5. Mai 2015 um 11:55 Uhr

  • $this->route('foo) funktioniert bei mir nicht von einem Laravel 5.2 Controller (“Fehler beim Auswerten des Codes”) Route::current()->getParameter('foo') tut – (siehe meine Antwort.) Hat sich etwas geändert oder muss ich zuerst etwas anderes laden?

    – William Turell

    5. August 2016 um 18:12 Uhr


  • @WilliamTurrell Bei dieser Frage geht es darum, Routenparameter in einer Form Request-Methode abzurufen (authorize in diesem Fall) Die route Die Methode existiert immer noch auf dem Anforderungsobjekt, aber nie auf dem Controller.

    – Lukasgeiter

    5. August 2016 um 18:47 Uhr

Sie können über die Illuminate\Http\Request-Instanz auf einen Routenparameterwert zugreifen

public function destroy($id, DeletePivotRequest $request)
{
    if ($request->route('id'))
    {
        //
    }

    Resource::findOrFail($id);
}

Je nachdem, wie Sie den Parameter in Ihren Routen definiert haben.

Für meinen Fall unten wäre es: 'user' nicht 'id'

$id = $this->route('user');

Geben Sie hier die Bildbeschreibung ein

  • Hatte das gleiche Problem bei der Verwendung der Routenmodellbindung

    – Robert Roche

    5. Dezember 2019 um 3:39 Uhr

  • @Emmanuel Opio versuchen Sie dies laravel.com/docs/5.6/routing#implicit-binding

    – Suganya Rajasekar

    4. April 2020 um 20:13 Uhr

Benutzer-Avatar
William Turell

Laravel 5.2, innerhalb eines Controllers:

use Route;

...

Route::current()->getParameter('id');

Ich fand dies nützlich, wenn Sie dieselbe Controller-Methode für mehr als eine Route mit mehr als einem URL-Parameter verwenden möchten und möglicherweise nicht immer alle Parameter vorhanden sind oder in einer anderen Reihenfolge angezeigt werden …

dh getParameter('id')gibt Ihnen die richtige Antwort, unabhängig davon {id}Position von in der URL.

Sehen Laravel Docs: Zugriff auf die aktuelle Route

Nach dem Testen der anderen Lösungen scheint es für Laravel 8 nicht zu funktionieren, aber das unten funktioniert

Route::getCurrentRoute()->id

Angenommen, Ihre Route ist

Route::post('something/{id}', ...)

Benutzer-Avatar
Bryan

Ich bin hierher gekommen, um nach einer Antwort zu suchen, und habe sie irgendwie in den Kommentaren gefunden, also wollte ich sie für andere klären, indem ich eine Ressourcenroute verwende, die versucht, dies in einer Formularanfrage zu verwenden

wie von Lukas in seinem Kommentar erwähnt: Angesichts eines Ressourcencontrollers Route::resource('post', ...) Der Parameter, den Sie verwenden können, wird benannt post

Das war nützlich für mich, aber nicht ganz vollständig. Es scheint, dass der Parameter die singuläre Version des letzten Teils des Ressourcen-Stubs sein wird.

In meinem Fall wurde die Route als definiert $router->resource('inventory/manufacturers', 'API\Inventory\ManufacturersController');

Und der verfügbare Parameter war manufacturer (die Singularversion des letzten Teils des Stummels inventory/manufacturers)

Benutzer-Avatar
Symlal

Sie erhalten die Parameter-ID, wenn Sie anrufen

request()->route('id')

ODER

$this->route('id')

Wenn Sie Ressourcenrouting verwenden, müssen Sie mit dem Ressourcennamen aufrufen

// eg: resource
Route::resource('users', App\Http\Controllers\UserController::class);

$this->route('user')

1282550cookie-checkWie verwende ich den Anforderungsroutenparameter in der Laravel 5-Formularanforderung?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy