Slots
The slot system allows components to receive blocks of HTML content, providing flexibility and reusability in component design.
Defining Slots
To define slots within a component, encapsulate the desired content areas within
<?php
namespace App\Component;
final readonly class Card
{
} ?>
<template>
<div class="card">
<div class="card-title">
<slot :name="title">
Default Title
</slot>
</div>
<div class="card-content">
<slot :name="content"></slot>
</div>
<div class="card-footer">
<slot :name="footer">
Default Footer
</slot>
</div>
</div>
</template>
Using slots
<?php
namespace App\Component;
final readonly class HomePage
{
} ?>
<template :uses="App\Component\Card">
<Card>
<fragment :slot="title">My Card Title</fragment>
<p :slot="content">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus assumenda aut debitis distinctio,
doloremque dolores impedit iste iusto, magni nam numquam optio quo recusandae sint ullam ut voluptas
voluptatem voluptatum.
</p>
<fragment :slot="footer">Custom Footer</fragment>
</Card>
</template>
<p :slot="content">
,
$this
corresponds to an HomePage
instance, somewhat if there was no :slot
attribute
Fallback content
<template>
<Card>
<p :slot="content">
Only content provided. No title or footer.
</p>
</Card>
</template>
In this case, since the title and footer slots are not filled, the default content specified in the Card component template is used.