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