Laravelを使ってみよう-9 @yieldと@sectionの深い関係

2022年09月16日

インクルードとは少し概念が違う

前回の記事でログイン画面はわかったのですが、コンテンツの部分をどのテンプレートから持ってきているのかがわかりませんでした。app.blade.phpの中で@sectionと@yieldの部分で@yield(‘content’)とあり、contentと名前のついたテンプレートがあるのかな?と思ったのですがありませんでした。

一体何を参照しているのか、流れを整理しながら探していきたいと思います。

まずweb.phpにアクセス

まずhttp://127.0.0.1:8000/にアクセスすると、routes/web.phpにアクセスしresouces/views/auth/login.blade.phpのデータにアクセスします。Controllerは特になし。

login.blade.phpを見てみると、最初にviews/layouts/app.blade.phpを拡張するという意味と思われる@extends('layouts.app')と書いてあります。普通にphpで組んでいるとベースになるレイアウトファイルに別のファイルをインクルードする形を取りますが、コードの可読性を考えてか従来インクルードするファイルにベースファイルの拡張であることを表記しているようですね。

そしてその下に気になっていた@section('content')の表記。要はappのレイアウトファイルにlogin.blade.phpのファイル内の内容で拡張しますよという命令ですね。これはLaravelならではの表現な気がしますね…

ログインするとhomeに転送

ログインフォームのpost先が/homeになっているので、ログインするとふたたびroutes/web.phpにhomeのテンプレートを使用するという情報とpostした情報が転送されます。

web.phpに今度は下のように表記されています(auth認証コマンドを実行したときに増えていたみたいです)

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

homeがgetで送信されてきたとき、App\Http\Controllers\HomeController.phpのindexのメソッドを使用するという命令ですね。見てみましょう。

スポンサーリンク

Controllerファイルの確認

public function index()
    {
        return view('home');
    }

indexメソッドを見てみると、homeのviewファイルを使うとなっています。ここでresources/views/home.blade.phpを見てみます。

homeのviewファイルを確認

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Dashboard') }}</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif

                    {{ __('You are logged in!') }}
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

resources/views/layouts/app.phpの拡張で、@yield('content')の部分に@section('content')の部分を使用するという命令になりますね。実際のログイン後の画面を確認すると、

homeのviewファイルの@sectionの部分がメインコンテンツ部分に表示されています。

それはわかったのですが、session('status')…これはなんだ…?

ようやくテンプレートの仕組みがわかってきた

今回は共通部分と差し替え部分のテンプレートの構文@yieldと@sectionを順番に調べていきました。

最後にまた意味不明なものが出てきたので次回はそれを調べてみたいと思います。たぶんsessionの配列にstatusって項目があって、それがある場合はそれを表示するって意味だとは思うのだけど、いろいろやっても何も出てこない…

お知らせ

株式会社プラン・ドゥではphpとデータベースを利用したアプリケーション開発を行なっております。
wordpressでのホームページ作成、phpのスクラッチ開発などが可能です。
業務効率化等でお困りのことがございましたら、システムのご提案からさせていただきますのでお気軽にご相談ください。

その他の取扱商品はこちらからご覧いただけます。
http://plando-inc.co.jp/product

お知らせ

株式会社プラン・ドゥでは展示会の設営や販促品やホームページなど販促に関わるサービスの販売を行なっております。
展示会などでのノベルティなど豊富に取り揃えております。

取扱商品はこちらからご覧いただけます。
http://plando-inc.co.jp/product

同じカテゴリの記事

関連記事

スポンサーリンク

DTP

Laravel開発

wordpressカスタマイズ

デジタルマーケティング

ライフハック

動画

当社製品について

Contact各種お問い合わせ

お問い合わせ・ご相談など
まずはお気軽にご相談ください

お仕事のご依頼やご相談、弊社サービス内容に関してなど、お気軽にご相談ください。

トップページ コラム 各種お問い合わせ プライバシーポリシー