Laravel の Blade を触っていると、
<x-layouts::app.sidebar :title="$title ?? null">
<flux:main>
{{ $slot }}
</flux:main>
</x-layouts::app.sidebar>
みたいな書き方に出会います。
最初に見たときに「x-layouts って何? components じゃないの?」となったので、
自分用に整理しておきます。
1. まず結論
<x-layouts::app.sidebar> の layouts は、
Blade コンポーネントの名前空間(alias) です。
ざっくり分解すると次のイメージです。
x-:Blade コンポーネント呼び出しlayouts:::名前空間つきで呼ぶapp.sidebar:その名前空間の中のapp/sidebarを指す
2. 普通の <x-...> との違い
よくあるのはこれです。
<x-alert />
これは通常、
resources/views/components/alert.blade.php
を参照します。
一方で、
<x-layouts::app.sidebar />
は「layouts という名前空間」に対して解決するので、
components 配下とは限りません。
たとえば layouts が resources/views/layouts に紐づいていれば、
resources/views/layouts/app/sidebar.blade.php
を見に行きます。
3. その名前空間はどこで登録される?
基本は Service Provider の boot() です。
例:
use Illuminate\Support\Facades\Blade;
Blade::anonymousComponentPath(resource_path('views/layouts'), 'layouts');
これで layouts:: 名前空間が使えるようになります。
なので「誰が登録しているか?」は、ざっくり次の2パターンです。
- 自分のアプリ側(
AppServiceProviderなど) - 導入しているパッケージ側(Livewire / Flux / Jetstream など)
4. どこを見れば確実に追えるか
プロジェクト内検索で次を探すと、だいたい当たります。
anonymousComponentPath(componentNamespace(layouts::'layouts'
また、従来のレイアウト機能との混同に注意です。
@extends('layouts.app')
これは Blade コンポーネントではなく、ビュー継承の仕組みです。
<x-layouts::...> とは別物です。
5. 自分向けメモ(混乱しやすいポイント)
<x-layouts.app>と<x-layouts::app>は別物.はコンポーネント名の階層::は名前空間の区切りx-...だからといって必ずresources/views/componentsとは限らない
ここが頭に入っていれば、 Livewire starter kit のレイアウトまわりを読んだときに迷いにくくなるはずです。