Probably the easiest way to add dynamic HTML title to Laravel app
Run the following command from your terminal:
composer require kminek/laravel-titleor add this to require section in your composer.json file:
"kminek/laravel-title": "^1.0"then run composer update
| Laravel | laravel-title |
|---|---|
| 11.x / 12.x | 1.x / 2.x |
Modify your layout view (for example resources/views/layouts/app.blade.php):
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ title() }}</title>
</head>
<body>
<main>
@yield('content')
</main>
</body>
</html>Modify your controller action view (for example resources/views/auth/register.blade.php):
@extends('layouts.app')
@title('Register')
@section('content')
<h1>
Register
</h1>
...
@endsectionChange default separator (|):
<title>{{ title()->separator(' - ') }}</title>Change default text (config('app.name')):
<title>{{ title()->default('AppName') }}</title>Set a description which is displayed when no title is set inside controller action view:
<title>{{ title()->default('AppName')->description('This app will blow your mind!') }}</title>You are not required to use @title() Blade directive, you can call
library directly which opens more possibilities:
@extends('layouts.app')
@php(title()->append('Register')) {{-- append (same behaviour as Blade directive) --}}
@php(title()->prepend('Register')) {{-- prepend --}}
@php(title()->set('Register')) {{-- replace whole stack --}}
@section('content')
<h1>
Register
</h1>
...
@endsectionYou can have multiple title "stacks" under different keys. Default stack is using "default" as a key, but you are free to create new ones:
<title>{{ title('homepage') }}</title>and later in Blade view:
@php(title('homepage')->append('Register'))