サーチ…


前書き

カスタムリクエスト(またはフォームリクエスト)は、コントローラメソッドにヒットする前に要求を認証して 検証する必要がある場合に便利です。

2つの実用的な使い方を考えてみましょう。それぞれのアクションが異なる検証(または認可)ルールセットを持つ一方、レコードを作成および更新します。

フォームリクエストを使用するのは簡単ですが、メソッドにリクエストクラスをタイプヒントする必要があります。

構文

  • php artisan make:リクエストname_of_request

備考

要求は、コントローラから検証を分離するときに便利です。また、要求が承認されているかどうかを確認することもできます。

リクエストの作成

php artisan make:request StoreUserRequest

php artisan make:request UpdateUserRequest

:FormRequestsはapp/Http/Requests/フォルダに配置されているので、 StoreUserUpdateUserRequest付録なし)などの名前を使用することも考えられます。

フォームリクエストの使用

ユーザーの例を続けてみましょう(ストアメソッドと更新メソッドを持つコントローラがあるかもしれません)。 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つの変数があります。

これら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;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow