Ответ 1
Если вы используете @extends
в своем макете контента, вы можете использовать это:
@extends('master', ['title' => $title])
В 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
в раздел содержимого представления. Как я могу предоставить эту переменную для всего представления или, по крайней мере, мастер-макет?
Если вы используете @extends
в своем макете контента, вы можете использовать это:
@extends('master', ['title' => $title])
Для будущих Google'rs, которые используют Laravel 5, вы также можете использовать его вместе с include,
@include('views.otherView', ['variable' => 1])
Мне удалось решить эту проблему, добавив это к моему методу контроллера:
$title = 'My Title Here';
View::share('title', $title);
$this- > layout- > title= 'Домашняя страница'; тоже не работает.
В шаблоне 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>
Это мой первый ответ здесь. Надеюсь, он работает. Удачи!
Кажется, что я могу передавать переменные во весь макет, используя атрибуты объекта макета, например, чтобы решить мою проблему, я смог сделать следующее:
$this->layout->title = 'Home page';
Самый простой способ решить:
view()->share('title', 'My Title Here');
Или с помощью вида "Фасад":
use View;
...
View::share('title', 'My Title Here');
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')
...
Вы можете попробовать:
public function index()
{
return View::make('pages/index', array('title' => 'Home page'));
}
просто попробуйте этот простой метод: в контроллере: -
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>
Это все.
$data['title'] = $this->layout->title = 'The Home Page';
$this->layout->content = View::make('home', $data);
Я делал это до сих пор, потому что мне нужно как в представлении, так и в главном файле. Кажется, если вы не используете заголовок $this- > layout- > , он не будет доступен в макете макета. Усовершенствования приветствуются!