Laravel 4.2 ビューとレスポンス

レスポンスの基本

ルートへ文字列をリターンする

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

カスタムレスポンスを生成する

ResponseインスタンスはSymfony\Component\HttpFoundation\Responseクラスを継承しています。これによりHTTPレスポンスを組み立てるための数多くのメソッドが提供されています。

$response = Response::make($contents, $statusCode);

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

return $response;

Responseクラスメソッドへアクセスする必要があり、レスポンスのコンテンツにはビューを返したい場合、Response::viewメソッドが便利です。

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

レスポンスにクッキーを付ける

$cookie = Cookie::make('name', 'value');

return Response::make($content)->withCookie($cookie);

リダイレクト

リダイレクトをリターンする

return Redirect::to('user/login');

フラッシュデータと伴にリダイレクトをリターンする

return Redirect::to('user/login')->with('message', 'Login Failed');

注目:withメソッドにより、フラッシュデーターがセッションに保存されますので、通常Session::getメソッドで取得できます。

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

return Redirect::route('login');

名前付きルートへパラメーターを渡し、リダイレクトする

return Redirect::route('profile', array(1));

名前付きルートへ名前付きパラメータでリダイレクトする

return Redirect::route('profile', array('user' => 1));

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

return Redirect::action('HomeController@index');

コントローラーアクションへパラメーターを渡し、リダイレクトする

return Redirect::action('UserController@profile', array(1));

コントローラーアクションへ名前付きパラメーターを渡し、リダイレクトする

return Redirect::action('UserController@profile', array('user' => 1));

ビュー

典型的なビューはアプリケーションのHTMLで構成されており、コントローラーとドメインロジックをプレゼンテーションロジックから切り離す便利な方法です。ビューはapp/viewsディレクトリーに保存されます。

シンブルなビューは以下のような形式でしょう。

<!-- app/views/greeting.phpに保存されているビュー -->

<html>
    <body>
        <h1>こんにちは、<? echo $name; ?>さん</h1>
    </body>
</html>

このビューをブラウザに送り返すには次のようにします。

Route::get('/', function()
{
    return View::make('greeting', array('name' => 'Taylor'));
});

View::makeの第二引数にはビューで使用するデーターの配列を渡します。

ビューにデーターを渡す

// Using conventional approach
$view = View::make('greeting')->with('name', 'Steve');

// Using Magic Methods
$view = View::make('greeting')->withName('steve');

上の例では$name変数はビューでアクセスされ、Steveの値を取ります。

ご希望であれば、データーの配列をmakeメソッドの第2パラメーターとして渡すこともできます。

$view = View::make('greetings', $data);

さらに全てのビューでアクセス可能なデーターを渡すこともできます。

View::share('name', 'Steve');

ビューにサブビューを渡す

例えば、app/views/child/view.phpとして保存されているサブビューがある場合、他のビューに以下のように渡せます。

$view = View::make('greeting')->nest('child', 'child.view');

$view = View::make('greeting')->nest('child', 'child.view', $data);

サブビューは親のビューからレンダーリングすることもできます。

<html>
    <body>
        <h1>Hello!</h1>
        <?php echo $child; ?>
    </body>
</html>

ビューの存在を確認する

ビューが存在するかを確認する必要がある場合、View::existsメソッドが使用できます。

if (View::exists('emails.customer'))
{
    //
}

ビューコンポーサー

ビューコンポーサーはビューがレンダーされる時に呼び出されるコールバック、もしくはクラスメソッドです。アプリケーション全体でレンダーされる可能性があるビューで、それに結びつけるデータが存在するならば、ビューコンポーサーで一箇所にコードをまとめる事ができます。ですから、ビューコンポーサーは"ビューモデル"とか"プレゼンター"のように機能します。

ビューコンポーサーを定義する

View::composer('profile', function($view)
{
    $view->with('count', User::count());
});

profileビューがレンダーされるたびに、countデーターはビューと結合されます。

ビューコンポーサーを複数のビューに対し、一度に設定することも可能です。

View::composer(array('profile','dashboard'), function($view)
{
    $view->with('count', User::count());
});

クラスベースのビューコンポーサーを代わりに使っている場合、便利なのはお望みでしたら、アプリケーションのIoCコンテナを使いインスタンスの解決ができることです。

View::composer('profile', 'ProfileComposer');

ビューコンポーサークラスは次のような形式です。

class ProfileComposer {

    public function compose($view)
    {
        $view->with('count', User::count());
    }

}

複数のコンポーサーを定義する

composersメソッドで、コンポーサーのグループを一度に登録できます。

View::composers(array(
    'AdminComposer' => array('admin.index', 'admin.profile'),
    'UserComposer' => 'user',
    'ProductComposer@create' => 'product' 
));

注目:コンポーサークラスをどこに保存するかという規則はありません。どこにでも自由に設置し、composer.jsonファイルでディレクティブを用い、オートロードできるように設定して下さい。

ビュークリエーター

ビュークリエーターはビューコンポーサーと全く同じように動作します。違いはビューがインスタンス化されたらすぐに実行されることです。ビュークリエーターを使用するには、ただcreatorメソッドを使用するだけです。

View::creator('profile', function($view)
{
    $view->with('count', User::count());
});

特別なレスポンス

JSONレスポンスを生成する

return Response::json(array('name' => 'Steve', 'state' => 'CA'));

JSONレスポンスを生成する

return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback'));

ファイルダウンロードレスポンスを生成する

return Response::download($pathToFile);

return Response::download($pathToFile, $name, $headers);

注目: ファイルのダウンロードを管理するSymfonyのHttpFoundationは、ダウンロードするファイルにASCIIのファイル名をつけることを要求しています。

レスポンスマクロ

多くのルートやコントローラの中で再利用できるように、カスタムレスポンスを定義することもできます。Response::macroメソッドを使用して下さい。

Response::macro('caps', function($value)
{
    return Response::make(strtoupper($value));
});

macro機能は、最初の引数として名前を受けます。2つ目はクロージャーです。マクロのクロージャーはResponseクラスにマクロ名を付け呼び出された場合に実行されます。

return Response::caps('foo');

app/start下のファイルの一つの中で、マクロを定義することができます。もしくは、マクロ定義を独立させたファイルに記述し、startファイルの一つから読み込むこともできます。

ドキュメント章別ページ

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)へ移動

その他

?

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