LaravelのBladeでextendsの切り替え

投稿者: | 2017年9月6日

Laravelの開発で、一般ユーザーと管理ユーザーでレイアウトを変えたいことがあり、
次のようなコーディングをしました。

@if($mode == 'admin')
    @extends('admin.layout')
@else
    @extends('layout')
@endif

しかし、これでは常にlayoutの方が読み込まれ、admin.layoutは読み込まれることはありませんでした。

なんでかなと考えたのですが、Bladeはまずファイル中のextendsを最優先で探し、そこから解釈するのだなと思い当たりました。
そのため、前述のコーディングでは、二つ目のextendsが有効になっているのではと。

そこで、下記のようにextends内で、切り替えを行うようにしたところうまくいきました。

@extends(($mode == 'admin')?'admin.layout':'layout')

ただ、コントローラーの中で親レイアウトを指定する変数を定義しておくのが一番良い方法なのでしょうね。