在我的标题中,我一直在使用@yield('title')为每个不同的页面创建动态标题。我想更进一步,做一些这样的事情:
@if(@yield('title') == 'post')
<h1> This is the post page </h1>
@endif
但是,如果我尝试我得到错误:
“”yield“表达式只能在函数”
中使用我已经四处寻找并发现了诸如Section :: yield('title')之类的东西,但它们都没有用。
如何在if语句中使用@yield('title')的值? 我知道你可以从控制器向视图发送一个$ title,但我认为这看起来不太好。你必须两次定义标题。
感谢阅读!
答案 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标签的情况下,我认为这违背了使用模板引擎的目的。
如果它不是你想要的,那么至少我希望它有所帮助。
答案 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')
也会更清晰。