Published on August 22, 2024By DeveloperBreeze

Tutorial: Understanding Laravel Layouts and Their Usage

Introduction

In web development, layouts are crucial for maintaining consistency across different pages of an application. Laravel, a popular PHP framework, provides powerful tools to manage layouts efficiently through its Blade templating engine. In this tutorial, we'll explore different types of layouts in Laravel, how to create and use them, and how to include CSS and JavaScript assets in your layouts.

Prerequisites

Before you begin, ensure you have the following:

  • Basic knowledge of PHP and Laravel.

  • Laravel installed in your development environment.

Step 1: Understanding Laravel Layouts

Laravel's Blade templating engine allows you to create dynamic layouts that can be extended by various views. This helps maintain a consistent look and feel across different pages and reduces code duplication.

1.1 Types of Layouts in Laravel

    • Master Layout: The main layout that includes common elements such as the header, footer, and navigation bar. All other views can extend this layout.

    • Nested Layouts: Layouts that extend a master layout and are further extended by other views. Useful for creating different sections or sub-layouts.

    • Component Layouts: Blade components that represent reusable pieces of a layout, like buttons, modals, or card sections.

Step 2: Creating a Master Layout

A master layout is the foundation of your Laravel application's UI. It typically contains the main HTML structure and includes placeholders for dynamic content.

2.1 Creating the Master Layout

    • Create a new file named master.blade.php inside the resources/views/layouts directory:

mkdir -p resources/views/layouts
   touch resources/views/layouts/master.blade.php
   

    • Add the basic structure to master.blade.php:

<!DOCTYPE html>
   <html lang="en">
   <head>
       <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
       <title>@yield('title', 'My Laravel App')</title>
       <link rel="stylesheet" href="{{ asset('css/app.css') }}">
   </head>
   <body>
       <header>
           <nav>
               <ul>
                   <li><a href="{{ url('/') }}">Home</a></li>
                   <li><a href="{{ url('/about') }}">About</a></li>
                   <li><a href="{{ url('/contact') }}">Contact</a></li>
               </ul>
           </nav>
       </header>

       <main>
           @yield('content')
       </main>

       <footer>
           <p>© 2024 My Laravel App. All rights reserved.</p>
       </footer>

       <script src="{{ asset('js/app.js') }}"></script>
   </body>
   </html>
   

    • Explanation:

@yield('title'): This directive defines a section where child views can inject a page-specific title.

@yield('content'): This is where the main content of each page will be inserted.

- CSS/JS: The {{ asset('css/app.css') }} and {{ asset('js/app.js') }} directives are used to include CSS and JavaScript files that are stored in the public directory.

2.2 Extending the Master Layout

To use the master layout in other views, you need to extend it.

    • Create a new view (e.g., home.blade.php) inside the resources/views directory:

touch resources/views/home.blade.php
   

    • Extend the master layout in home.blade.php:

@extends('layouts.master')

   @section('title', 'Home')

   @section('content')
       <h1>Welcome to My Laravel App</h1>
       <p>This is the home page.</p>
   @endsection
   

    • Explanation:

@extends('layouts.master'): This directive tells Blade to use master.blade.php as the layout.

@section('title', 'Home'): This sets the page title to "Home".

@section('content'): This block will be injected into the @yield('content') section of the master layout.

Step 3: Creating Nested Layouts

Nested layouts are useful when you need to create different sections or subsections of your site that share a common structure but are still distinct.

3.1 Creating a Nested Layout

    • Create a new nested layout (e.g., dashboard.blade.php) inside the resources/views/layouts directory:

touch resources/views/layouts/dashboard.blade.php
   

    • Add content to dashboard.blade.php:

@extends('layouts.master')

   @section('content')
       <div class="dashboard">
           <aside>
               <nav>
                   <ul>
                       <li><a href="{{ url('/dashboard') }}">Dashboard Home</a></li>
                       <li><a href="{{ url('/dashboard/profile') }}">Profile</a></li>
                       <li><a href="{{ url('/dashboard/settings') }}">Settings</a></li>
                   </ul>
               </nav>
           </aside>

           <section class="main-content">
               @yield('dashboard-content')
           </section>
       </div>
   @endsection
   

    • Explanation:

@extends('layouts.master'): This layout extends the main master layout.

@yield('dashboard-content'): A specific section for dashboard content, allowing further nested views.

3.2 Using the Nested Layout

    • Create a new view (e.g., profile.blade.php) inside the resources/views/dashboard directory:

mkdir -p resources/views/dashboard
   touch resources/views/dashboard/profile.blade.php
   

    • Extend the nested layout in profile.blade.php:

@extends('layouts.dashboard')

   @section('dashboard-content')
       <h2>User Profile</h2>
       <p>Here you can update your profile information.</p>
   @endsection
   

    • Explanation:

@extends('layouts.dashboard'): This view uses the dashboard layout, which in turn extends the master layout.

@section('dashboard-content'): This content is injected into the @yield('dashboard-content') section of the dashboard.blade.php layout.

Step 4: Creating and Using Blade Components

Blade components are reusable pieces of a layout, such as buttons, cards, or modals.

4.1 Creating a Blade Component

    • Create a new component (e.g., alert.blade.php) inside the resources/views/components directory:

mkdir -p resources/views/components
   touch resources/views/components/alert.blade.php
   

    • Add content to alert.blade.php:

<div class="alert alert-{{ $type }}">
       {{ $slot }}
   </div>
   

    • Explanation:

$type: A dynamic variable to set the alert type (e.g., success, danger).

$slot: Represents the content passed into the component when it is used.

4.2 Using the Blade Component

    • Use the component in a view (e.g., home.blade.php):

@extends('layouts.master')

   @section('title', 'Home')

   @section('content')
       <h1>Welcome to My Laravel App</h1>
       <p>This is the home page.</p>

       <x-alert type="success">
           This is a success alert!
       </x-alert>
   @endsection
   

    • Explanation:

<x-alert>: This syntax is used to include the alert component.

type="success": Sets the alert type, which controls the class applied to the alert.

{{ $slot }}: The content inside the component is passed as $slot.

Step 5: Including CSS and JavaScript in Layouts

In Laravel, you can manage CSS and JavaScript files efficiently by including them in your layouts.

5.1 Including CSS Files

    • Add CSS files to the public/css directory (e.g., app.css):

touch public/css/app.css
   

    • Link the CSS file in your master.blade.php:

<link rel="stylesheet" href="{{ asset('css/app.css') }}">
   

    • Explanation:

{{ asset('css/app.css') }}: Generates the URL to the app.css file in the public directory.

5.2 Including JavaScript Files

    • Add JavaScript files to the public/js directory (e.g., app.js):

touch public/js/app.js
   

    • Link the JavaScript file in your master.blade.php:

<script src="{{ asset('js/app.js') }}"></script>
   

    • Explanation:

{{ asset('js/app.js') }}: Generates the URL to the app.js file in the public directory.

Step 6: Utilizing Laravel Mix for Asset Management

Laravel Mix is a tool for compiling and optimizing assets like CSS and JavaScript. It provides a fluent API for defining Webpack build steps.

6.1 Setting Up Laravel Mix

    • Install dependencies:

npm install
   

    • Define the build process in webpack.mix.js:

const mix = require('laravel-mix');

   mix.js('resources/js/app.js', 'public/js')
      .sass('resources/sass/app.scss', 'public/css');
   

    • Run the build:

npm run dev
   

    • Explanation:

mix.js(): Compiles JavaScript files.

mix.sass(): Compiles SCSS files into CSS.

npm run dev: Runs the build process in development mode.

Conclusion

Laravel's layout system, powered by Blade templating, provides a flexible and powerful way to manage the structure of your web application. By mastering different types of layouts—master layouts, nested layouts, and Blade components—you can create reusable and maintainable code. Additionally, managing CSS and JavaScript with Laravel Mix helps streamline the development process.

This tutorial covered the creation and usage of various Laravel layouts, including how to include and manage CSS and JavaScript assets. With this knowledge, you can build complex and consistent web applications with ease.

Comments

Please log in to leave a comment.

Continue Reading:

JavaScript Promise Example

Published on January 26, 2024

php

Building a Real-Time Chat Application with WebSockets in Node.js

Published on August 03, 2024

javascriptcsshtml

Tailwind CSS Card Component

Published on August 03, 2024

csshtml

Tailwind CSS Responsive Navigation Bar

Published on August 03, 2024

csshtml

JavaScript Code Snippet: Fetch and Display Data from an API

Published on August 04, 2024

javascriptjson

Building a Modern Web Application with React and Redux

Published on August 05, 2024

javascript

Advanced TypeScript: Type Inference and Advanced Types

Published on August 05, 2024

typescript