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.