How do I pass a variable to the layout using Laravel' Blade templating?

LaravelLaravel 4Blade

Laravel Problem Overview


In Laravel 4, my controller uses a Blade layout:

class PagesController extends BaseController {
    protected $layout = 'layouts.master';
}

The master layout has outputs the variable title and then displays a view:

...
<title>{{ $title }}</title>
...
@yield('content')
....

However, in my controller I only appear to be able to pass variables to the subview, not the layout. For example, an action could be:

public function index()
{
    $this->layout->content = View::make('pages/index', array('title' => 'Home page'));
}

This will only pass the $title variable to the content section of the view. How can I provide that variable to the whole view, or at the very least the master layout?

Laravel Solutions


Solution 1 - Laravel

If you're using @extends in your content layout you can use this:

@extends('master', ['title' => $title])

Note that same as above works with children, like: > >@include('views.subView', ['my_variable' => 'my-value']) >

Usage

Then where variable is passed to, use it like:

<title>{{ $title ?? 'Default Title' }}</title>

Solution 2 - Laravel

For future Google'rs that use Laravel 5, you can now also use it with includes,

@include('views.otherView', ['variable' => 1])

Solution 3 - Laravel

In the Blade Template : define a variable like this

@extends('app',['title' => 'Your Title Goes Here'])
@section('content')

And in the app.blade.php or any other of your choice ( I'm just following default Laravel 5 setup )

<title>{{ $title or 'Default title Information if not set explicitly' }}</title>

This is my first answer here. Hope it works.Good luck!

Solution 4 - Laravel

I was able to solve that problem by adding this to my controller method:

    $title = 'My Title Here';
    View::share('title', $title);

$this->layout->title = 'Home page'; did not work either.

Solution 5 - Laravel

Simplest way to solve:

view()->share('title', 'My Title Here');

Or using view Facade:

use View;

...

View::share('title', 'My Title Here');

Solution 6 - Laravel

It appears as though I can pass variables to the entire layout using attributes on the layout object, for example to solve my problem I was able to do the following:

$this->layout->title = 'Home page';

Solution 7 - Laravel

class PagesController extends BaseController {
    protected $layout = 'layouts.master';

    public function index()
    {
        $this->layout->title = "Home page";
        $this->layout->content = View::make('pages/index');
    }
}

At the Blade Template file, REMEMBER to use @ in front the variable.

...
<title>{{ $title or '' }}</title>
...
@yield('content')
...

Solution 8 - Laravel

if you want to get the variables of sections you can pay like this:

$_view      = new \View;
$_sections  = $_view->getFacadeRoot()->getSections();
dd($_sections);
/*
Out:
array:1 [▼
  "title" => "Painel"
]
*/

Solution 9 - Laravel

just try this simple method: in controller:-

 public function index()
   {
        $data = array(
            'title' => 'Home',
            'otherData' => 'Data Here'
        );
        return view('front.landing')->with($data);
   }

And in you layout (app.blade.php) :

<title>{{ $title }} - {{ config('app.name') }} </title>

Thats all.

Solution 10 - Laravel

Following is simple solution worked for me. In layout

    <title>@yield('Page-Title') </title>

in your blade

@section('Page-Title')
Add {{ucFirst($payor->name)}}
@endsection	

Solution 11 - Laravel

You can try:

public function index()
{
    return View::make('pages/index', array('title' => 'Home page'));
}

Solution 12 - Laravel

$data['title'] = $this->layout->title = 'The Home Page';
$this->layout->content = View::make('home', $data);

I've done this so far because I needed in both the view and master file. It seems if you don't use $this->layout->title it won't be available in the master layout. Improvements welcome!

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDwightView Question on Stackoverflow
Solution 1 - Laravels3v3nView Answer on Stackoverflow
Solution 2 - LaravelChilionView Answer on Stackoverflow
Solution 3 - LaravelRohan KrishnaView Answer on Stackoverflow
Solution 4 - LaravelTim TrustonView Answer on Stackoverflow
Solution 5 - LaravelEfraView Answer on Stackoverflow
Solution 6 - LaravelDwightView Answer on Stackoverflow
Solution 7 - LaravelShiroView Answer on Stackoverflow
Solution 8 - LaravelDEV Tiago FrançaView Answer on Stackoverflow
Solution 9 - LaravelWeb DecodeView Answer on Stackoverflow
Solution 10 - LaravelKunal RajputView Answer on Stackoverflow
Solution 11 - LaravelMelvinView Answer on Stackoverflow
Solution 12 - LaravelAnthony VipondView Answer on Stackoverflow