Laravel 5.0 HTTPレスポンス

レスポンスの基本

ルートからの文字列リターン

Laravelのルートから返す、一番基本的なレスポンスは文字列です。

Route::get('/', function()
{
    return 'Hello World';
});

カスタムレスポンスの生成

しかし、ほとんどのルートとコントローラーアクションから、Illuminate\Http\Responseインスタンスか、ビューを返します。Responseインスタンスを返せば、レスポンスのHTTPステータスコードやヘッダーがカスタマイズできます。Responseインスタンスは、Symfony\Component\HttpFoundation\Responseを継承しており、HTTPレスポンスを組み立てるために数多くのメソッドを提供しています。

use Illuminate\Http\Response;

return (new Response($content, $status))
              ->header('Content-Type', $value);

responseヘルパも、便利に使用できます。

return response($content, $status)
              ->header('Content-Type', $value);

注目: Responseメソッドの完全なリストは、APIドキュメントと、SymfonyのAPIドキュメントをご覧ください。

レスポンスへのビュー送信

Responseクラスメソッドにアクセスする必要があるが、レスポンスの内容としてビューを返したい場合は、viewメソッドが便利でしょう。

return response()->view('hello')->header('Content-Type', $type);

クッキー付きレスポンス

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

メソッドチェーン

ほとんどのResponseメソッドはチェーンできることを覚えておきましょう。レスポンスをスラスラ構築できます。

return response()->view('hello')->header('Content-Type', $type)
                 ->withCookie(cookie('name', 'value'));

リダイレクト

リダイレクトのレスポンスには、ほとんどの場合Illuminate\Http\RedirectResponseクラスのインスタンスを使用します。このクラスは、ユーザーを他のURLへリダイレクトさせるために必要な、しっかりとしたヘッダーを含んでいます。

リダイレクトのリターン

RedirectResponseインスタンスを生成する方法はたくさんあります。一番シンプルな方法は、redirectヘルパを使うことです。テストの時にリダイレクトレスポンスを生成するモックは一般的ではありませんから、ほとんどの場合、これで大丈夫でしょう。

return redirect('user/login');

フラッシュデータ指定のリダイレクト

新しいURLへリダイレクトし、フラッシュデーターをセッションへ保存するのは、同時に行われるのが典型的です。ですから、利便性を上げるために、RedirectResponseインスタンスを生成し、同時に同じメソッドチェーンで、フラッシュデーターをセッションへ保存することもできます。

return redirect('user/login')->with('message', 'Login Failed');

直前のURLへのリダイレクト

直前のURLへユーザーをリダイレクトしたい場合があります。例えば、フォーム送信後です。backメソッドで行います。

return redirect()->back();

return redirect()->back()->withInput();

名前付きルートへのリダイレクト

redirectヘルパを引数なしで呼び出すと、Illuminate\Routing\Redirectorのインスタンスが返されますので、このクラスのメソッドを呼び出すことができます。例えば、名前付きルートへのRedirectResponseを生成したい場合は、routeメソッドを使用します。

return redirect()->route('login');

引数指定の名前付きルートへのリダイレクト

ルートに引数がある場合、routeメソッドの第2引数として指定できます。

// profile/{id}へのルート

return redirect()->route('profile', [1]);

あるルートへ"id"パラメータを伴い、Eloquentモデルを取得するルートへリダイレクトする場合、モデル自身をそのまま渡してください。IDは自動的にとり出されます。

return redirect()->route('profile', [$user]);

名前付き引数指定の名前付きルートへのリダイレクト

//profile/{user}へのルート

return redirect()->route('profile', ['user' => 1]);

コントローラーアクションへのリダイレクト

名前付きルートへのRedirectResponseインスタンスの生成と同様に、コントローラーアクションへのリダイレクトも生成可能です。

return redirect()->action('App\Http\Controllers\HomeController@index');

注目: URL::setRootControllerNamespaceにより、コントローラーのルート名前空間が登録されていれば、完全な名前空間を指定する必要はありません。

引数指定コントローラーアクションへのリダイレクト

return redirect()->action('App\Http\Controllers\UserController@profile', [1]);

名前付き引数指定のコントローラーアクションへのリダイレクト

return redirect()->action('App\Http\Controllers\UserController@profile', ['user' => 1]);

その他のレスポンス

responseヘルパは、他のタイプのレスポンスインスタンスを生成するために便利です。responseヘルパが引数なしで呼び出されると、Illuminate\Contracts\Routing\ResponseFactory契約が返されます。この契約はレスポンスを生成するための、様々なメソッドを提供しています。

JSONレスポンスの生成

jsonメソッドは、Content-Typeヘッダーに、application/jsonを自動的にセットします。

return response()->json(['name' => 'Abigail', 'state' => 'CA']);

JSONPレスポンスの生成

return response()->json(['name' => 'Abigail', 'state' => 'CA'])
                 ->setCallback($request->input('callback'));

ファイルダウンロードレスポンスの生成

return response()->download($pathToFile);

return response()->download($pathToFile, $name, $headers);

return response()->download($pathToFile)->deleteFileAfterSend(true);

注意: ダウンロードを管理する、SymfonyのHttpFoundationは、ダウンロードするファイルの名前がASCIIファイル名であることを求めています。

レスポンスマクロ

様々なルートとコントローラーの中で再利用するために、カスタムレスポンスを定義したい場合は、Illuminate\Contracts\Routing\ResponseFactoryの実装のmacroメソッドを使用できます。

例えば、サービスプロバイダーbootメソッドで定義します。

<?php namespace App\Providers;

use Response;
use Illuminate\Support\ServiceProvider;

class ResponseMacroServiceProvider extends ServiceProvider {

    /**
     * 登録したサービスが起動後に実行
     *
     * @return void
     */
    public function boot()
    {
        Response::macro('caps', function($value)
        {
            return Response::make(strtoupper($value));
        });
    }

}

macroメソッドは名前を最初の引数、クロージャーを2つ目に取ります。マクロのクロージャーは、ResponseFactoryの実装か、responseヘルパにマクロ名を付けて呼び出した時に、実行されます。

return response()->caps('foo');

ドキュメント章別ページ

Artisan CLI

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる