📂

Laravel 「無名インデックスコンポーネント」とは何なのか?

2021/12/16に公開

前置き

小難しいネーミングですね。名前を聞いた瞬間、目を背けたくなりますが、内容は簡単です。コンポーネント(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