如何使用Laravel的Blade模板将变量传递给布局?

时间:2013-04-20 08:01:06

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

12 个答案:

答案 0 :(得分:170)

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

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

答案 1 :(得分:28)

对于使用Laravel 5的未来Google员工,您现在也可以将其与包含

一起使用
@include('views.otherView', ['variable' => 1])

答案 2 :(得分:19)

我能够通过将其添加到我的控制器方法来解决这个问题:

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

$ this-&gt; layout-&gt; title ='主页';也没用。

答案 3 :(得分:11)

在刀片模板中:定义一个像这样的变量

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

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

答案 4 :(得分:4)

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

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

答案 5 :(得分:4)

最简单的解决方法:

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

或使用视图Facade:

use View;

...

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

答案 6 :(得分:2)

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')
...

答案 7 :(得分:0)

您可以尝试:

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

答案 8 :(得分: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>

就这些。

答案 9 :(得分:0)

如果要获取各个部分的变量,可以按以下方式支付:

$_view      = new \View;
$_sections  = $_view->getFacadeRoot()->getSections();
dd($_sections);
/*
Out:
array:1 [▼
  "title" => "Painel"
]
*/

答案 10 :(得分:0)

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

                       u1    u2    u3     value
time                                                
2021-06-28 00:00:00    ON    ON    ON     1.000
2021-06-28 01:00:00    ON    ON    ON     1.000
2021-06-28 02:00:00    ON    ON    ON     1.000
2021-06-28 03:00:00    ON    ON    ON     1.000
2021-06-28 04:00:00    ON    ON    ON     0.664
2021-06-28 04:00:00   OFF    ON    ON     0.336
2021-06-28 05:00:00   OFF    ON    ON     0.410
2021-06-28 05:00:00    ON    ON    ON     0.590
2021-06-28 06:00:00   OFF    ON    ON     1.000

在你的刀片中

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

答案 11 :(得分:-2)

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

到目前为止我已经这样做了,因为我需要在视图和主文件中。如果您不使用$ this-&gt; layout-&gt;标题,它将无法在主布局中使用。欢迎改进!