Как передать переменную в макет с использованием шаблона Laravel Blade?

В Laravel 4 мой контроллер использует макет Blade:

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

Мастер-макет выводит название переменной, а затем отображает вид:

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

Тем не менее, в моем контроллере я только могу передать переменные в подвью, а не в макет. Например, действие может быть:

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

Это приведет только к передаче переменной $title в раздел содержимого представления. Как я могу предоставить эту переменную для всего представления или, по крайней мере, мастер-макет?

Ответ 1

Если вы используете @extends в своем макете контента, вы можете использовать это:

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

Ответ 2

Для будущих Google'rs, которые используют Laravel 5, вы также можете использовать его вместе с include,

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

Ответ 3

Мне удалось решить эту проблему, добавив это к моему методу контроллера:

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

$this- > layout- > title= 'Домашняя страница'; тоже не работает.

Ответ 4

В шаблоне Blade: определите переменную типа

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

И в app.blade.php или любой другой по вашему выбору (я просто следую настройке по умолчанию Laravel 5)

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

Это мой первый ответ здесь. Надеюсь, он работает. Удачи!

Ответ 5

Кажется, что я могу передавать переменные во весь макет, используя атрибуты объекта макета, например, чтобы решить мою проблему, я смог сделать следующее:

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

Ответ 6

Самый простой способ решить:

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

Или с помощью вида "Фасад":

use View;

...

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

Ответ 7

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

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

В файле шаблона Blade ПОМНИТЕ использовать @перед переменной.

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

Ответ 8

Вы можете попробовать:

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

Ответ 9

просто попробуйте этот простой метод: в контроллере: -

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

А в вашем макете (app.blade.php):

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

Это все.

Ответ 10

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

Я делал это до сих пор, потому что мне нужно как в представлении, так и в главном файле. Кажется, если вы не используете заголовок $this- > layout- > , он не будет доступен в макете макета. Усовершенствования приветствуются!