Ricerca…
introduzione
Le richieste personalizzate (o richieste di modulo) sono utili in situazioni in cui si desidera autorizzare e convalidare una richiesta prima di colpire il metodo del controllore.
Si può pensare a due usi pratici, creando e aggiornando un record mentre ogni azione ha un diverso insieme di regole di validazione (o autorizzazione).
L'utilizzo delle richieste di modulo è banale, si deve digitare la classe di richiesta nel metodo.
Sintassi
- php artisan make: richiesta name_of_request
Osservazioni
Le richieste sono utili quando si separa la convalida dal Controller. Consente inoltre di verificare se la richiesta è autorizzata.
Creazione di richieste
php artisan make:request StoreUserRequest
php artisan make:request UpdateUserRequest
Nota : puoi anche considerare l'utilizzo di nomi come StoreUser o UpdateUser (senza Appendice di richiesta ) poiché i tuoiRichiesta sono inseriti nell'app di cartella
app/Http/Requests/
.
Utilizzando la richiesta di modulo
Diciamo continuate con l'esempio utente (potreste avere un controller con metodo store e metodo di aggiornamento). Per utilizzare FormRequests, si utilizza type-suggerendo la richiesta specifica.
...
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();
}
Gestione dei reindirizzamenti dopo la convalida
A volte potresti voler avere qualche login per determinare dove l'utente viene reindirizzato dopo aver inviato un modulo. Le richieste di modulo offrono una varietà di modi.
Di default ci sono 3 variabili dichiarate nella richiesta $redirect
, $redirectRoute
e $redirectAction
.
Oltre a queste 3 variabili, è possibile eseguire l'override del gestore di reindirizzamento principale getRedirectUrl()
.
Di seguito viene fornita una richiesta di esempio che spiega cosa è possibile fare.
<?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;
}
}