Sök…


Introduktion

Anpassade förfrågningar (eller formulärbegäranden) är användbara i situationer där man vill godkänna och validera en begäran innan man trycker på controller-metoden.

Man kan tänka på två praktiska användningar, skapa och uppdatera en post medan varje åtgärd har en annan uppsättning valideringsregler (eller behörighetsregler).

Att använda formulärförfrågningar är trivialt, man måste skriva antydan på begärandeklassen i metod.

Syntax

  • php artisan make: begär namn_of_request

Anmärkningar

Förfrågningar är användbara när du skiljer din validering från Controller. Det låter dig också kontrollera om begäran är godkänd.

Skapa förfrågningar

php artisan make:request StoreUserRequest

php artisan make:request UpdateUserRequest

Obs! Du kan också överväga att använda namn som StoreUser eller UpdateUser (utan appendix för begäran ) eftersom dina FormRequests placeras i mappapp app/Http/Requests/ .

Använda formulärbegäran

Låt oss säga fortsätta med användarexempel (du kan ha en controller med lagringsmetod och uppdateringsmetod). För att använda FormRequests använder du typvisningen för den specifika begäran.

...

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();
}

Hantering av omdirigeringar efter validering

Ibland kanske du vill ha en inloggning för att avgöra var användaren omdirigeras till efter att ha skickat in ett formulär. Formulärförfrågningar ger olika sätt.

Som standard finns det 3 variabler som deklareras i Request $redirect , $redirectRoute och $redirectAction .

Ovanpå de getRedirectUrl() variablerna kan du åsidosätta getRedirectUrl() .

En exempelförfrågan ges nedan för att förklara vad du kan göra.

<?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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow