106

在 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变量传递给视图的内容部分。如何将该变量提供给整个视图,或者至少提供给主布局?

4

12 回答 12

245

如果您@extends在内容布局中使用,则可以使用:

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

请注意,与上述相同的方法适用于儿童,例如:

@include('views.subView', ['my_variable' => 'my-value'])

用法

然后在变量被传递到的地方,像这样使用它:

<title>{{ $title ?? 'Default Title' }}</title>
于 2015-03-29T21:38:54.460 回答
49

对于未来使用 Laravel 5 的 Google 用户,您现在也可以将它与包含一起使用,

@include('views.otherView', ['variable' => 1])
于 2016-06-13T12:55:43.463 回答
23

在 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>

这是我在这里的第一个答案。希望它有效。祝你好运!

于 2015-05-24T15:55:39.313 回答
19

通过将其添加到我的控制器方法中,我能够解决该问题:

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

$this->layout->title = '主页'; 也没有工作。

于 2013-06-10T07:10:50.170 回答
5

最简单的解决方法:

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

或使用视图外观:

use View;

...

View::share('title', 'My Title Here');
于 2016-05-13T07:25:35.397 回答
4

似乎我可以使用布局对象上的属性将变量传递给整个布局,例如为了解决我的问题,我能够执行以下操作:

$this->layout->title = 'Home page';
于 2013-04-20T08:04:02.447 回答
1
class PagesController extends BaseController {
    protected $layout = 'layouts.master';

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

在 Blade Template 文件中,请记住在变量前面使用 @。

...
<title>{{ $title or '' }}</title>
...
@yield('content')
...
于 2014-04-07T14:30:45.827 回答
1

如果您想获取部分的变量,您可以像这样支付:

$_view      = new \View;
$_sections  = $_view->getFacadeRoot()->getSections();
dd($_sections);
/*
Out:
array:1 [▼
  "title" => "Painel"
]
*/
于 2020-08-30T17:48:00.113 回答
0

以下是对我有用的简单解决方案。在布局中

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

在你的刀片中

@section('Page-Title')
Add {{ucFirst($payor->name)}}
@endsection 
于 2021-06-29T12:37:07.477 回答
0

试试这个简单的方法:在控制器中:-

 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>

就这样。

于 2019-10-19T07:34:44.913 回答
-1

你可以试试:

public function index()
{
    return View::make('pages/index', array('title' => 'Home page'));
}
于 2013-08-02T08:00:24.993 回答
-2
$data['title'] = $this->layout->title = 'The Home Page';
$this->layout->content = View::make('home', $data);

到目前为止,我已经这样做了,因为我需要在视图和主文件中。似乎如果您不使用 $this->layout->title 它在​​主布局中将不可用。欢迎改进!

于 2013-08-02T04:28:29.263 回答