Laravel 「無名インデックスコンポーネント」とは何なのか?
前置き
小難しいネーミングですね。名前を聞いた瞬間、目を背けたくなりますが、内容は簡単です。コンポーネント(Laravel 7 以降の新コンポーネント)を駆使している方には、少し嬉しい機能です。
Laravel 8.62(2021-09-28)からの登場です。
参考:無名インデックスコンポーネント
参考:Allow index.blade.php views for anonymous components #38847
本題
以前、下記のような記事を書かせていただいた事がありますが、
Laravel 新コンポーネントを使って、<form>タグ周りをすっきりさせる
これは、form タグをコンポーネント化するという話でした。
(記事で紹介しておきつつ、自分では全く使っていないという話もありますが、それはさておき)
個人的には、他にも input やら select やら、form の子要素系のコンポーネントを幾つか作っています。
例えば、下記のような感じで書きます。(あくまで簡素化したサンプル)
<x-form>
名前:<x-form.text name="myname" />
都道府県:<x-form.pref />
生年月日:<x-form.year /> 年
</x-form>
この時、form タグについては、<x-form> としたく、その子要素達については、<x-form.text /> みたいな形にしたい為、従来なら以下のようにファイルを配置する必要がありました。
views/components/form.blade.php ← これだけ form フォルダに入ってない。
views/components/form/text.blade.php
views/components/form/pref.blade.php
views/components/form/year.blade.php
ですが、できれば下記のように、1つのフォルダにまとめたい所ですね。
そうすれば、form 系以外のコンポーネントが沢山あってもすっきりするし、他の人に配布する時も配布しやすくなります。
views/components/form/form.blade.php ← ここ
views/components/form/text.blade.php
views/components/form/pref.blade.php
views/components/form/year.blade.php
ただこうすると、
<x-form.form> ← ここ
略
</x-form>
と書かざるを得なくなり、ややイケてない感じになります。
そこで、<x-form> ~ </x-form> の形を使いつつ、1つのフォルダにまとめたい時は、ファイル名をこうしてやれば OK となります。
views/components/form/index.blade.php ← ここ
views/components/form/text.blade.php
views/components/form/pref.blade.php
views/components/form/year.blade.php
これが、「無名インデックスコンポーネント」機能です。
雑感
これで、少しすっきりするかも知れません。
ちなみに、この機能(プルリク)は、Laravel Livewire / Alpine.js 作成者の Caleb Porzio(ケイレブ・ポージオ)さんによって行われました。感謝です。
Discussion