リクエストインスタンスの取得

ファサードによる取得

Requestファサードは、コンテナにより結合されている、現在のリクエストへアクセスさせてくれます。例えば:

$name = Request::input('name');

名前空間下では、クラスファイルの初めで、user Request文により、Requestファサードをインポートする必要があることを覚えておいてください。

依存注入による取得

依存注入により、現在のHTTPリクエストインスタンスを取得するには、コントローラーのコンストラクターかメソッドに、タイプヒントにより指定します。現在のリクエストインスタンスは、サービスプロバイダーにより、自動的に注入されます。

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class UserController extends Controller {

    /**
     * 新ユーザーの保存
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        $name = $request->input('name');

        //
    }

}

もし、コントローラーメソッドで、ルートパラメーターも併用したい場合は、依存の指定の後にルート引数を続けてリストしてください。

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class UserController extends Controller {

    /**
     * 新ユーザーの保存
     *
     * @param  Request  $request
     * @param  int  $id
     * @return Response
     */
    public function update(Request $request, $id)
    {
        //
    }

}

入力の取得

一つの値を取得する

Illuminate\Http\Requestインスタンスのシンプルなメソッドを利用すれば、ユーザー入力の全てにアクセスできます。リクエストのHTTP動詞に気をもむ必要はありません。全ての動詞の入力に対し、同じ方法でアクセスできます。

$name = Request::input('name');

入力値が存在しない場合に、デフォルト値を取得する

$name = Request::input('name', 'Sally');

入力値が存在するか確かめる

if (Request::has('name'))
{
    //
}

リクエストの全入力を取得する

$input = Request::all();

限定されたリクエスト入力のみ取得する

$input = Request::only('username', 'password');

$input = Request::except('credit_card');

「配列」入力を使ったフォームを動作させる場合、ドット記法を使い、配列にアクセスできます。

$input = Request::input('products.0.name');

直前の入力

さらにLaravelでは、現在のリクエストの入力を次のリクエストに持ち越すこともできます。例えば、入力をチェックし、バリデーションエラーがあった場合、フォームへ入力された値を再表示する必要があるでしょう。

フラッシュデーターをセッションへ保存

flashメソッドは、アプリケーションの次のリクエストでも、現在の入力へアクセスできるように、セッションへフラッシュデーターとして保存します。

Request::flash();

一部のデーターをフラッシュデーターとして保存

Request::flashOnly('username', 'email');

Request::flashExcept('password');

フラッシュデーターとリダイレクト

多くの場合、前のページへのリダイレクトにフラッシュデーターを一緒に付けることが多いですので、リダイレクトにチェーンし、入力をフラッシュデーターとして保存できます。

return redirect('form')->withInput();

return redirect('form')->withInput(Request::except('password'));

直前の入力の取得

前のリクエストで保存したフラッシュデーターを取得するには、Requestインスタンスのoldメソッドを使用してください。

$username = Request::old('username');

Bladeテンプレートの中で、直前の入力を表示する場合は、oldヘルパーを使い、便利に表示できます。

{{ old('username') }}

クッキー

Laravelフレームワークが作るクッキーは全部、認証コードを利用し暗号化されています。つまり、クライアントが変更すると、無効なクッキーだと判断します。

クッキー値の取得

$value = Request::cookie('name');

新クッキーをレスポンスへ追加

cookieヘルパーは、新しいSymfony\Component\HttpFoundation\Cookieインスタンスを生成する、シンプルなファクトリーとして動作します。そのクッキーは、withCookieメソッドを使用し、Responseインスタンスに付けます。

$response = new Illuminate\Http\Response('Hello World');

$response->withCookie(cookie('name', 'value', $minutes));

永遠に残るクッキーの作成

永遠とは、実際には5年間を意味しています。

$response->withCookie(cookie()->forever('name', 'value'));

ファイル

アップデートしたファイルを取得する

$file = Request::file('photo');

ファイルがアップロードされたか調べる

if (Request::hasFile('photo'))
{
    //
}

fileメソッドがリターンするのは、Symfony\Component\HttpFoundation\File\UploadedFileクラスのインスタンスで、PHPのSplFileInfoを拡張しています。それにはファイルに関する様々なメソッドが提供されています。

アップロードされたファイルが有効であるか調べる

if (Request::file('photo')->isValid())
{
    //
}

アップロードしたファイルを削除する

Request::file('photo')->move($destinationPath);

Request::file('photo')->move($destinationPath, $fileName);

他のファイルメソッド

他にも様々なメソッドが、UploadedFileインスタンスに用意されています。更に知りたい場合は、このクラスのAPIドキュメントを確認してください。

その他の情報

Requestクラスはアプリケーションに対するHTTPリクエストを調べるための多くのメソッドを提供しており、Symfony\Component\HttpFoundation\Requestを拡張しています。その特徴のいくつかをご覧ください。

リクエストされたURIを取得する

$uri = Request::path();

リクエストのメソッドを取得する

$method = Request::method();

if (Request::isMethod('post'))
{
    //
}

リクエスされたパスがパターンと一致するか調べる

if (Request::is('admin/*'))
{
    //
}

現在のリクエストURLを取得する

$url = Request::url();