Поиск…
Вступление
Пользовательские запросы (или Запросы формы) полезны в ситуациях, когда требуется авторизировать и проверять запрос перед ударом по методу контроллера.
Можно подумать о двух практических применениях, создании и обновлении записи, в то время как каждое действие имеет другой набор правил валидации (или авторизации).
Использование запросов формы является тривиальным, нужно набирать тип запроса в методе.
Синтаксис
- php artisan make: request name_of_request
замечания
Запросы полезны при отмене проверки с помощью контроллера. Он также позволяет вам проверить, разрешен ли запрос.
Создание запросов
php artisan make:request StoreUserRequest
php artisan make:request UpdateUserRequest
Примечание: Вы можете также рассмотреть вопрос об использовании имен , как StoreUser или UpdateUser (без запроса приложения) , так как ваши FormRequests помещаются в папку
app/Http/Requests/
.
Использование запроса формы
Допустим, продолжайте с примером пользователя (у вас может быть контроллер с методом хранения и методом обновления). Чтобы использовать FormRequests, вы используете тип-намек на конкретный запрос.
...
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();
}
Обработка перенаправления после проверки
Иногда вам может понадобиться логин для определения того, куда пользователь перенаправляется после отправки формы. Запросы формы предоставляют различные способы.
По умолчанию в Request $redirect
, $redirectRoute
и $redirectAction
объявлены 3 переменных.
Помимо этих трех переменных вы можете переопределить основной обработчик перенаправления getRedirectUrl()
.
Ниже приведен пример запроса, поясняющий, что вы можете сделать.
<?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;
}
}