Laravel

ビュー

ビューの作成

ビューはアプリケーションとして動作するHTMLにより構成されており、コントローラー/アプリケーションロジックをプレゼンテーションロジックから分離します。ビューはresources/viewsディレクトリに保存します。 シンプルなビューは、以下のような形態です。

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

<html>
    <body>
        <h1>Hello, {{ $name }}</h1>
    </body>
</html>

このビューをresources/views/greeting.blade.phpとして保存していますので、以下のようにグローバルviewヘルパ関数を使用し結果を返します。

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

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

もちろん、ビューはresources/viewsディレクトリのサブディレクトリにネストすることもできます。ネストしたビューを参照するために「ドット」記法が使えます。例えば、ビューがresources/views/admin/profile.blade.phpとして保存するなら、次のように指定します。

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

ビューの存在を検査

ビューが存在しているかを判定する必要があれば、Viewファサードを使います。ビューが存在していれば、existsメソッドはtrueを返します。

use Illuminate\Support\Facades\View;

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

ビューにデータを渡す

前例で見たように、簡単にデータを配列でビューに渡せます。

return view('greetings', ['name' => 'Victoria']);

この方法で情報を渡す場合、$dataはキー/値ペアの配列です。ビューの中で各値へは対抗するキーでアクセスできます。たとえば<?php echo $key; ?>のように表示可能です。全データをviewヘルパ関数に渡す代わりに、withメソッドでビューに渡すデータを個別に追加することもできます。

return view('greeting')->with('name', 'Victoria');

全ビュー間のデータ共有

アプリケーションでレンダーする全ビューに対し、一部のデータを共有する必要があることも多いと思います。Viewファサードのshareメソッドを使ってください。 通常、サービスプロバイダのbootメソッド内でshareを呼び出します。AppServiceProviderに追加しても良いですし、独立したサービスプロバイダを作成することもできます。

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * アプリケーションサービスの初期処理
     *
     * @return void
     */
    public function boot()
    {
        View::share('key', 'value');
    }

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

ビューコンポーザ

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

この例のサービスプロバイダの中に、ビューコンポーザを組み込みましょう。Viewファサードの裏で動作している、Illuminate\Contracts\View\Factory契約の実装にアクセスします。Laravelはデフォルトのビューコンポーザ置き場を用意していないことに注意してください。お好きな場所に置くことができます。たとえば、App\Http\ViewComposersディレクトリを作成することもできます。

<?php

namespace App\Providers;

use Illuminate\Support\Facades\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()
    {
        //
    }
}

Note: 新しいサービスプロバイダをビューコンポーザ登録のために作成したら、config/app.php設定ファイルのproviders配列へ追加する必要があるのを忘れないでください。

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

<?php

namespace App\Http\ViewComposers;

use Illuminate\View\View;
use App\Repositories\UserRepository;

class ProfileComposer
{
    /**
     * userリポジトリの実装
     *
     * @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());
    }
}

ビューがレンダーされる直前に、Illuminate\View\Viewインスタンスに対しコンポーザのcomposeメソッドが呼びだされます。

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

複数ビューへの適用

複数のビューにビューコンポーザを適用するには、composerメソッドの最初の引数にビューの配列を渡してください。

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

全ビューコンポーザに適用できるように、composerメソッドでは*をワイルドカードとして使用できます。

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

Viewクリエーター

ビュークリエイターは、ビューコンポーザとほぼ同じ働きをします。しかし、ビューがレンダーされるまで待つのではなく、インスタンス化されるとすぐに実行されます。ビュークリエイターを登録するには、creatorメソッドを使います。

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

ドキュメント章別ページ

開発環境
ビューとテンプレート
Artisanコンソール
公式パッケージ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュを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)へ移動

その他

?

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