Kolejna szybka lekcja o komponentach Blade w Laravelu. Do dzieła.

Ok, komponent utworzymy komendą:

php artisan make:component people.anchor --view

To nam utworzy view component, czyli taki tylko z plikiem Blade, bez klasy. Możemy przekopiować do niego zawartość poprzedniego:

<div>
    <li>
        <a href="{{route('person.sigleRecord', $id)}}">
            <b>Name:</b>{{$name}} <b>ID</b>: {{$id}}
        </a>
    </li>
</div>

Pytanie tylko skąd on ma wiedzieć, czym jest name i id, skoro nie ma klasy, konstruktora, tych pól określonych. Cóż, tu wchodzą do gry props:

@props([
    'name',
    'id',
])

<div>
    <li>
        <a href="{{route('person.sigleRecord', $id)}}">
            <b>Name:</b>{{$name}} <b>ID</b>: {{$id}}
        </a>
    </li>
</div>

Teraz tylko musimy go sobie przetestować:

Route::get('/people/bycreatedatdesc', function (Request $request) {
    $ppl= Person::orderBy('created_at', 'desc')->get();
    
    return Blade::render(
    '<ul>
    @forelse($people as $person)
     <x-people.anchor :id="$person->id" :name="$person->full_name"/>
    @empty
    <li>Nothing found</li>
    @endforelse
    </ul>
    ', ['people' => $ppl]);
});

Działa bez problemu. Takie komponenciki (bez niepotrzebnych klas) świetnie nadają się do współpracy z np. AlpineJS. Lekko, łatwo, przyjemnie i to zarówno od strony JS jak i PHP nie przesadzamy.

Z drugiej strony – React, Vue (oraz Svelte, ale tego Breeze nie wspiera jeszcze) posiadają własny system komponentów po stronie frameworka frontendowego. Też dobre rozwiązanie.