Components and slots help you build reusable parts in your web pages. They keep your code clean and easy to manage.
Components and slots in Laravel
Introduction
Syntax
Laravel
{{-- Define a component --}}
<x-component-name>
{{-- Slot content here --}}
</x-component-name>
{{-- In component blade file --}}
<div>
{{ $slot }}
</div>Use to include a component in your blade view.
Inside the component blade file, use {{ $slot }} to show the passed content.
Examples
Laravel
<x-alert>
This is an alert message.
</x-alert>Laravel
<!-- resources/views/components/alert.blade.php --> <div class="alert"> {{ $slot }} </div>
Laravel
<x-card>
<x-slot name="title">Card Title</x-slot>
This is the card body content.
</x-card>Laravel
<!-- resources/views/components/card.blade.php --> <div class="card"> <h2>{{ $title }}</h2> <div>{{ $slot }}</div> </div>
Sample Program
This example creates a button component that wraps any text passed inside it. The welcome view uses the button component with the text 'Click me'.
Laravel
<!-- resources/views/components/button.blade.php --> <button class="btn"> {{ $slot }} </button> <!-- resources/views/welcome.blade.php --> <x-button> Click me </x-button>
Important Notes
Slots let you insert any HTML or text inside components.
Named slots help organize multiple content areas inside one component.
Components improve code reuse and make your views cleaner.
Summary
Components are reusable pieces of UI in Laravel Blade.
Slots let you pass content into components.
Use named slots for multiple content sections inside a component.
Practice
1. What is the main purpose of using components in Laravel Blade?
easy
Solution
Step 1: Understand what components do
Components in Laravel Blade are designed to hold reusable UI parts, like buttons or cards, so you don't repeat code.Step 2: Compare options with component purpose
Only To create reusable pieces of UI that can be included in multiple views describes reusable UI pieces. Other options describe unrelated tasks.Final Answer:
To create reusable pieces of UI that can be included in multiple views -> Option CQuick Check:
Components = reusable UI [OK]
Hint: Components = reusable UI blocks in Blade templates [OK]
Common Mistakes:
- Confusing components with routing or database tasks
- Thinking components are for PHP logic only
- Assuming components are only for styling
2. Which of the following is the correct syntax to pass a slot named
header to a Laravel Blade component called card?easy
Solution
Step 1: Recall named slot syntax in Blade
Named slots use<x-slot name="slotName">...</x-slot>inside the component tags.Step 2: Match syntax with options
<x-card><x-slot name="header">Title</x-slot></x-card>correctly uses<x-slot name="header">. Others misuse slot attribute or tag.Final Answer:
<x-card><x-slot name="header">Title</x-slot></x-card> -> Option AQuick Check:
Named slot syntax = <x-slot name="name"> [OK]
Hint: Use for named slots inside components [OK]
Common Mistakes:
- Using slot attribute instead of tag
- Confusing slot with regular HTML <slot> tag
- Passing slot content as a component attribute
3. Given this Blade component usage:
And the component template:
What will be the rendered HTML output?
<x-alert> <x-slot name="title">Warning</x-slot> This is an alert message. </x-alert>
And the component template:
<div class="alert">
<h4>{{ $title }}</h4>
<p>{{ $slot }}</p>
</div>What will be the rendered HTML output?
medium
Solution
Step 1: Understand slot and named slot usage
The$titlevariable receives content from the named slottitle. The default$slotholds the inner content outside named slots.Step 2: Match passed content to template placeholders
Thetitleslot is "Warning", and the default slot is "This is an alert message." so they fill<h4>and<p>respectively.Final Answer:
<div class="alert"><h4>Warning</h4><p>This is an alert message.</p></div> -> Option AQuick Check:
Named slot fills $title, default slot fills $slot [OK]
Hint: Named slots fill variables, default slot fills $slot content [OK]
Common Mistakes:
- Confusing default slot with named slot content
- Expecting named slot content inside $slot variable
- Ignoring that $title is set by named slot
4. Identify the error in this Blade component usage:
What is the problem?
<x-modal> <x-slot name="footer">Close</x-slot> <x-slot>Content here</x-slot> </x-modal>
What is the problem?
medium
Solution
Step 1: Check unnamed slot syntax
The default slot content should be placed directly inside the component tags, not wrapped in<x-slot>without a name.Step 2: Understand correct default slot usage
Using<x-slot>without a name is invalid. Default slot content is just plain content inside the component.Final Answer:
The unnamed slot is incorrectly declared with <x-slot> instead of using default slot syntax -> Option DQuick Check:
Default slot = direct content, not tag [OK]
Hint: Default slot is plain content, not wrapped in [OK]
Common Mistakes:
- Wrapping default slot content in without name
- Thinking all slots must be named
- Believing slots must be self-closing
5. You want to create a reusable
profile-card component that accepts a header slot for the user's name, a default slot for the bio, and a footer slot for action buttons. Which Blade component template correctly supports these slots?hard
Solution
Step 1: Match slots to variables
The named slotsheaderandfootercorrespond to$headerand$footer. The default slot content is in$slot.Step 2: Verify correct placement in template
<div class="profile-card"> <header>{{ $header }}</header> <section>{{ $slot }}</section> <footer>{{ $footer }}</footer> </div>places$headerin<header>,$slotin<section>, and$footerin<footer>, matching the requirement.Final Answer:
<div class="profile-card"> <header>{{ $header }}</header> <section>{{ $slot }}</section> <footer>{{ $footer }}</footer> </div> -> Option BQuick Check:
Named slots = $header/$footer, default slot = $slot [OK]
Hint: Named slots = variables, default slot = $slot in template [OK]
Common Mistakes:
- Mixing up slot variable names and their placement
- Using $slot for named slots
- Placing slots in wrong HTML sections
Recommended
Ready to prove it?
Pass the test and this pattern moves unknown
10 questions ~5 mineasy hard
