質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

Q&A

1回答

1222閲覧

Laravelのbladeテンプレートにて@section,@yieldを使用してheadやheader,footerなどの共通部分をテンプレート化したいのですが上手く表示されません。

sundara.

総合スコア5

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

0グッド

0クリップ

投稿2020/08/19 04:21

編集2020/08/19 07:01

前提・実現したいこと

Laravelのbladeテンプレートにて@section,@yieldを使用してheadやheader,footerなどの共通部分をテンプレート化したいのですが上手く表示されません。

該当のソースコード

resources\views\layouts\index.blade.php <!DOCTYPE html> <html lang="ja"> <head> @yield('head') </head> <body> <header> @yield('header') </header> <footer> @yield('footer') </footer> </body>
resources\views\head.blade.php @extends('layouts.index') @section('head') <meta charset="utf-8"> <link href="{{ asset('assets/css/style.css') }}" rel="stylesheet"> <title></title> @endsection
resources\views\header.blade.php @extends('layouts.index') @section('header') <div class="title"> <a href="{{ url('index')}}"> title </a> </div> @endsection
resources\views\footer.blade.php @extends('layouts.index') @section('footer') Copyright <a href="{{ url('home') }}">test</a>. All Rights Reserved. @endsection

補足情報(FW/ツールのバージョンなど)

コマンドプロンプトにてphp artisan -vでバージョンを見てみると
Laravel Framework 6.18.35
と表示されます。

試しに超簡単にtitleだけ変えられるのかやってみましたがやはり反映されません↓

resources\views\layouts\index.blade.php <!doctype html> <html lang="ja"> <head> <title>@yield('title')</title> </head> <body> </body> </html>
resources\views\title.blade.php @extends('layouts.index') @section('title', 'タイトル')

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sundara.

2020/08/19 05:55

失礼いたしました。 確かにartisanでした! 確認したところ Laravel Framework 6.18.35 と表示されました。
m.ts10806

2020/08/19 06:00

ということは、zushi0905さんの回答に提示されているドキュメントだとバージョンがあわないのでURLの5.5→6.xに変更して読み替える必要がありそうです。
guest

回答1

0

sectionは継承元のyeild部分に要素をはめ込む時に使います。今回のコードを見ると、head, header,footerのbladeにアクセスすれば、それぞれのパーツが組み込まれたページが表示できるでしょう。

おそらく投稿者さんのやりたいことはcomponentを使えば実現できるかと思います。
Bladeテンプレート コンポーネントとスロット

おそらく最終的には下のようなテンプレートを作り、各ページ実装の際に継承していくことになるかと思います。

blade

1resources\views\layouts\index.blade.php 2 3<!DOCTYPE html> 4<html lang="ja"> 5<head> 6 @component('head') 7</head> 8<body> 9 <header> 10 @component('header') 11 </header> 12 13 @yield('content') 14 15 <footer> 16 @component('footer') 17 </footer> 18</body>

各ページ

blade

1@extends('layouts.index') 2 3@section('content') 4 {-- 各ページのコンテンツ --} 5@endsection

注意

コードはノリで書いてるので動作の確認してないです。参考にする程度にしてください。

投稿2020/08/19 05:09

編集2020/08/19 06:43
zushi0905

総合スコア683

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sundara.

2020/08/19 05:53

回答ありがとうございます。 zushi0905さんが提示したものと同じフォルダ、ファイルを作成し、 試しにローカルサーバーにて表示させてみましたが、画面に @yeild('content') とだけ表示される状態になってしまいます。 拡張子は.blade.phpにしていますが、もしかして何かしらの設定が間違っているのでしょうか。 自分は新規ディレクトリ作成時に laravel new {ディレクトリ名} ではなくて composer create-project "laravel/laravel" --prefer-dist {ディレクトリ名} とcomposerを利用して作成しているのが悪さをしているのですかね...
kyoya0819

2020/08/19 06:35

いえ、Laravelのプロジェクトを作成するのに、composerを使うことは一般的であり、それが何か悪さをしているということは考え難いです。
zushi0905

2020/08/19 06:41

yeildでした。スペル違ってました^ ^ コードはノリで書いてるので動作の確認してないです。参考にする程度にしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問