Suche…


Einführung

Benutzerdefinierte Anforderungen (oder Formularanforderungen) sind in Situationen nützlich, in denen eine Anforderung autorisiert und validiert werden soll, bevor die Controller-Methode ausgeführt wird.

Es gibt zwei praktische Verwendungszwecke: Erstellen und Aktualisieren eines Datensatzes, während für jede Aktion unterschiedliche Validierungs- (oder Berechtigungs-) Regeln gelten.

Die Verwendung von Formularanfragen ist trivial, man muss die Anforderungsklasse in method eingeben.

Syntax

  • PHP Handwerker make: request name_of_request

Bemerkungen

Anfragen sind hilfreich, wenn Sie Ihre Validierung vom Controller trennen. Sie können auch überprüfen, ob die Anforderung autorisiert ist.

Anfragen erstellen

php artisan make:request StoreUserRequest

php artisan make:request UpdateUserRequest

Hinweis : Sie können auch die Verwendung von Namen wie StoreUser oder UpdateUser (ohne Anhang " Request" ) in Betracht ziehen, da sich Ihre FormRequests im Ordner app/Http/Requests/ Http app/Http/Requests/ .

Formularanforderung verwenden

Nehmen wir an, wir fahren mit dem Anwenderbeispiel fort (möglicherweise verfügen Sie über einen Controller mit Speichermethode und Aktualisierungsmethode). Um FormRequests zu verwenden, verwenden Sie Typanweisungen für die jeweilige Anforderung.

...

public function store(App\Http\Requests\StoreRequest $request, App\User $user) { 
    //by type-hinting the request class, Laravel "runs" StoreRequest 
    //before actual method store is hit

    //logic that handles storing new user 
    //(both email and password has to be in $fillable property of User model
    $user->create($request->only(['email', 'password']));
    return redirect()->back();
}

...

public function update(App\Http\Requests\UpdateRequest $request, App\User $users, $id) { 
    //by type-hinting the request class, Laravel "runs" UpdateRequest 
    //before actual method update is hit

    //logic that handles updating a user 
    //(both email and password has to be in $fillable property of User model
    $user = $users->findOrFail($id);
    $user->update($request->only(['password']));
    return redirect()->back();
}

Umleitungen nach der Validierung behandeln

Manchmal möchten Sie sich anmelden, um zu bestimmen, wohin der Benutzer nach dem Senden eines Formulars weitergeleitet wird. Formularanfragen bieten verschiedene Möglichkeiten.

Standardmäßig sind 3 Variablen in der Request $redirect , $redirectRoute und $redirectAction deklariert.

getRedirectUrl() diesen 3 Variablen können Sie den Main-Redirect-Handler getRedirectUrl() .

Nachstehend finden Sie eine Musteranfrage, in der beschrieben wird, was Sie tun können.

<?php namespace App;

use Illuminate\Foundation\Http\FormRequest as Request;

class SampleRequest extends Request {

    // Redirect to the given url
    public $redirect;

    // Redirect to a given route
    public $redirectRoute;

    // Redirect to a given action
    public $redirectAction;


    /**
     * Get the URL to redirect to on a validation error.
     *
     * @return string
     */
    protected function getRedirectUrl()
    {

        // If no path is given for `url()` it will return a new instance of `Illuminate\Routing\UrlGenerator`

        // If your form is down the page for example you can redirect to a hash
        return url()->previous() . '#contact';

        //`url()` provides several methods you can chain such as

        // Get the current URL
        return url()->current();

        // Get the full URL of the current request
        return url()->full();

        // Go back
        return url()->previous();

        // Or just redirect back
        return redirect()->back();
    }


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

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow