Laravel 5.0 ビュー

基本的な使用法

ビューはアプリケーションで動くHTMLにより構成されており、コントローラーとドメインロジックをプレゼンテーションロジックから分離するための便利な手法として役立ちます。ビューはresources/viewsディレクトリーに保存します。

シンプルなビューは、以下のような形態です。

<!-- resources/views/greeting.phpとして保存されているビュー -->

<html>
    <body>
        <h1>Hello, <?php echo $name; ?></h1>
    </body>
</html>

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

Route::get('/', function()
{
    return view('greeting', ['name' => 'James']);
});

ご覧の通り、viewヘルパに渡している最初の引数は、resources/viewsディレクトリー中のビューファイル名に対応しています。2つ目の引数は、ビューで使用するデータの配列です。

もちろん、ビューはresources/viewsディレクトリーのサブディレクトリーにネストすることもできます。例えば、ビューがresources/views/admin/profile.phpに保存されていれば、次のように指定します。

return view('admin.profile', $data);

ビューのデータ受け取り

// 便利なアプローチを使用する
$view = view('greeting')->with('name', 'Victoria');

// マジックメソッドを利用する
$view = view('greeting')->withName('Victoria');

上の例の場合、ビューの中から$name変数へアクセスでき、値Victoriaを取得できます。

お好みならば、viewヘルパの第2引数にデーターの配列を渡すこともできます。

$view = view('greetings', $data);

この方法で情報を渡す場合、$dataはキー/値ペアの配列です。ビューの中で各値へは対抗するキーでアクセスできます。$data['key']が存在する場合、{{ $key }}のようにです。

全ビューとのデータ共有

たまにアプリケーションの全ビューで表示される一部のデータを共有したい場合もあるでしょう。いくつかの選択肢があり、viewヘルパかIlluminate\Contracts\View\Factory契約、ワイルドカードビューコンポーサーです。

viewヘルパを使用する例です。

view()->share('data', [1, 2, 3]);

Viewファサードを使用することもできます。

View::share('data', [1, 2, 3]);

通常、サービスプロバイダーのbootメソッドの中で、shareメソッドを呼び出します。自由にAppServiceProviderへ付け足すか、専用のサービスプロバイダーを生成してコードを書きましょう。

注目: viewヘルパを引数なしで呼び出すと、Illuminate\Contracts\View\Factory契約の実装が返されます。

ビューの存在判定

ビューが存在しているかを判定する必要があるなら、existsメソッドを使用します。

if (view()->exists('emails.customer'))
{
    //
}

ファイルパス指定によるビュー生成

ご希望なら、絶対ファイルパスを指定し、ビューを生成することもできます。

return view()->file($pathToFile, $data);

ビューコンポーサー

ビューコンポーサーは、ビューがレンダーされる時に呼び出される、コールバックかクラスメソッドのことです。もし、ビューがレンダーされるたびに、結合したい情報があるなら、ビューコンポーサーがロジックを一箇所にまとめるのに役立ちます。

ビューコンポーサーの定義

サービスプロバイダーの中にビューコンポーサーを組み込みましょう。Viewファサードで動作しているIlluminate\Contracts\View\Factory契約の実装にアクセスします。

<?php namespace App\Providers;

use View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider {

    /**
     * コンテナに結合を登録する
     *
     * @return void
     */
    public function boot()
    {
        // クラスによるコンポーサーの使用…
        View::composer('profile', 'App\Http\ViewComposers\ProfileComposer');

        // クロージャーによるコンポーサーの使用
        View::composer('dashboard', function($view)
        {

        });
    }

    /**
     * サービスプロバイダーの登録
     *
     * @return void
     */
    public function register()
    {
        //
    }

}

注意: Laravelはビューコンポーサー用のディレクトリーをデフォルトで用意していません。お好きな場所に作成してください。例えば、App\Http\ViewComposersディレクトリーを作成できます。

config/app.php設定ファイルの中のproviders配列にサービスプロバイダーを追加するのを忘れないでください。

では、profileビューがレンダーされるたび実行される、ProfileComposer@composeメソッドをコンポーサーとして登録してみましょう。まず、このコンポーサークラスを定義します。

<?php namespace App\Http\ViewComposers;

use Illuminate\Contracts\View\View;
use Illuminate\Users\Repository as UserRepository;

class ProfileComposer {

    /**
     * ユーザーリポジトリーの実装
     *
     * @var UserRepository
     */
    protected $users;

    /**
     * 新しいプロファイルコンポーサーの生成
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        // サービスコンテナにより、自動的に依存が解決される
        $this->users = $users;
    }

    /**
     * ビューへデーターを結合する
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with('count', $this->users->count());
    }

}

ビューがレンダーされる直前に、コンポーサーのcomposeメソッドがIlluminate\Contracts\View\Viewインスタンスで呼び出されます。ビューにデーターを結合するために、withメソッドを使うこともできます。

注目: すべてのビューコンポーサーはサービスコンテナにより依存解決されます。ですから、コンポーサーのコンストラクターに必要な依存をタイプヒントで指定できます。

ワイルドカードビューコンポーサー

composerメソッドは、*文字をワイルドカードとして扱います。そのため、次のように全ビューにコンポーサーを指定できます。

View::composer('*', function($view)
{
    //
});

複数ビューへの適用

また、複数のビューに対し、一度にビューコンポーサーを指定することもできます。

View::composer(['profile', 'dashboard'], 'App\Http\ViewComposers\MyViewComposer');

複数のコンポーサー定義

一度にコンポーサーのグループを登録するためには、composersメソッドが使えます。

View::composers([
    'App\Http\ViewComposers\AdminComposer' => ['admin.index', 'admin.profile'],
    'App\Http\ViewComposers\UserComposer' => 'user',
    'App\Http\ViewComposers\ProductComposer' => 'product'
]);

ビュークリエイター

ビュークリエイターは、ビューコンポーサーとほとんど同じ働きをします。しかしこれは、ビューがインスタンス化されるとすぐに実行されます。ビュークリエイターを登録するには、creatorメソッドを使います。

View::creator('profile', 'App\Http\ViewCreators\ProfileCreator');

ドキュメント章別ページ

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

その他

?

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