nakajuice
nakajuice

Reputation: 692

How to pass data to layout in Laravel regardless of controller?

Let's say I got ControllerA and ControllerB which both implement the same layout. Now I want to pass data to layout, for example, a message that should appear in layout no matter which controller implements it. If I had only 1 controller, I would do something like:

class Controller extends \BaseController {
    public function setupLayout() {
        View::share('message', 'Hello world!');
    }

    // further methods
}

However, when I want multiple controllers to implement a layout, I have to do this in every controller, which doesn't sound reasonable. So I wanted to ask, is there any native way in Laravel to pass data to layout and not to copy code in every controller.

Thanks in advance!

Upvotes: 0

Views: 744

Answers (1)

Antonio Carlos Ribeiro
Antonio Carlos Ribeiro

Reputation: 87719

For those cases I would recommend a view composer, where you can set them for more than one view (or layout) or just all of them:

View::composer(['store.index', 'products.*'], function($view)
{
    $view->with('model', 'one');
    $view->with('colour', 'black');
});

You can put that in your routes file, filters file or, like, me, create a app/composers.php and load by adding

require app_path().'/composers.php';

To your app/start/global.php.

Upvotes: 2

Related Questions