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


в Laravel 4 Мой контроллер использует макет лезвия:

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 переменная в разделе содержимого представления. Как я могу предоставить эту переменную для всего представления, или в самом хотя бы мастер-макет?

9 53

9 ответов:

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

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

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

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

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

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

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

в шаблоне Блейда: определите такую переменную

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

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

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

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

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

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

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

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

или с помощью view Facade:

use View;

...

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

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

можно попробовать:

public function index()
{
    return View::make('pages/index', array('title' => 'Home page'));
}
class PagesController extends BaseController {
    protected $layout = 'layouts.master';
}

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

в файле шаблона Блейда не забудьте использовать @ перед переменной.

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