Laravel - @yield()不允许if

时间:2014-11-16 14:08:48

标签: php if-statement laravel blade yield

在我的标题中,我一直在使用@yield('title')为每个不同的页面创建动态标题。我想更进一步,做一些这样的事情:

@if(@yield('title') == 'post') 
     <h1> This is the post page </h1>
@endif

但是,如果我尝试我得到错误:

“”yield“表达式只能在函数”

中使用

我已经四处寻找并发现了诸如Section :: yield('title')之类的东西,但它们都没有用。

如何在if语句中使用@yield('title')的值? 我知道你可以从控制器向视图发送一个$ title,但我认为这看起来不太好。你必须两次定义标题。

感谢阅读!

3 个答案:

答案 0 :(得分:3)

让我们来看看你的代码

@if(@yield('title') == 'post') 
 <h1> This is the post page </h1>
@endif

让我们假设它有效。然后@section('title')会持有什么? Post?它没有任何意义。

@yield用于替换该部分的内容。它不应该是有条件的。它不应该用作变量。它有特定的目的。无论你想使用哪种条件,都可以在视图或控制器中使用它。

控制器:

return View::make('view.blade.php',['title' => 'post']);

是的。这就是你如何将var发送到视图。我觉得这个方法有什么问题。

对于laravel 4.1及更低版本,您可以使用此命令。

@extends('layout.blade.php')->with('title','post')

但此行为已更改。直到4.1,传递到视图的vars在布局中无法访问。现在,在4.2中,此行为已更改,无论您传递给视图的数据是什么,它都存在于控制器中。

答案 1 :(得分:0)

如果您只是将其定义为一个部分,那么它就更清晰了。我假设你有一个扩展主布局的刀片布局。

@extends('layouts.master')

@section('title', 'Some title')
@section('header')
     <h1> This is the post page </h1>
@stop

然后在主布局中输出它们。如果你有另一个页面应该有不同的标题和标题,那么你应该创建一个新的视图,再次扩展主布局。

我不确定这是你想要做的,但你不能将@yield的内容作为@if的条件。至少在没有涉及PHP标签的情况下,我认为这违背了使用模板引擎的目的。

如果它不是你想要的,那么至少我希望它有所帮助。

请参阅http://laravel.com/docs/4.2/templates以供参考。

答案 2 :(得分:0)

好的,我不是说这很漂亮,但你可以将PHP变量从视图传递到布局(或父视图)

包含“知道”标题的视图

<?php $title = 'post' ?>

布局视图

<?php
    // just making sure the variable is set
    if(!isset($title)){
        $title = 'default-title';
    }
?>

@if($title == 'post')
    <h1> This is the post page </h1>
@endif

但是,您可能不得不问自己是否应该改变您想要的方式。 (也许Integral Wind-up的答案很有帮助)。来自你的控制器的View::share('title', 'post')也会更清晰。