リクエストインスタンスの取得
ファサードによる取得
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'));
クッキーのキュー
実際にレスポンスが生成される前の状態でも、送り返されるレスポンスにクッキーを付けるために、キュー(queue)しておくこともできます。
<?php namespace App\Http\Controllers;
use Cookie;
use Illuminate\Routing\Controller;
class UserController extends Controller
{
/**
* Update a resource
*
* @return Response
*/
public function update()
{
Cookie::queue('name', 'value');
return response('Hello World');
}
}
ファイル
アップデートしたファイルの取得
$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();
リクエストがAJAXであるか判別
if (Request::ajax())
{
//
}
リクエストのメソッド取得
$method = Request::method();
if (Request::isMethod('post'))
{
//
}
リクエスされたパスのパターンマッチング
if (Request::is('admin/*'))
{
//
}
現在のリクエストURL取得
$url = Request::url();