2016-01-20 45 views
0

这可能看起来像一个奇怪的问题,但我是Laravel的新手,并且在官方文档中找到正确的语法有很多麻烦。这是一个例子。我正在使用以下刀片语法尝试并有条件视图:如何使用官方的Laravel文档?

@if (condition) 
    @extends 'layouts.regular' 
@else 
    @extends 'layouts.special' 
@endif 

这没有奏效。然后我去了La​​ravel站点的刀片文档,并阅读了Extending a Layout部分。一切似乎都很顺利,我花了10分钟调试我的代码,并试图找出我是否做错了什么。这一切似乎都是正确的,所以我然后诉诸Google,发现this thread

从意见我明白了:

  • 的@extends语句必须是在一个刀片模板中的第一行
  • 您只能使用一个有条件通过使用三元表达式
延长

虽然这解决了我的问题,但它花了很长时间才发现。我仍然无法弄清楚在这里提到的官方文档中的WHERE。我使用官方文档错了吗?那里有其他更广泛的文档吗?我一直认为在线文档非常简短,并且常常不能解释关于语法或例外的重要细节......

回答

0

@extends总是出现在刀片的第一行,它用于定义例如

假设我们有master.blade.php

<html> 
    <head> 
    </head> 
    <body> 
     @yield('content') 
    </body> 
</html> 

然后我们有page.blade.php

@extends('master') // this one says this page will be placed in master.blade.php 
@section('content') // find the line that says @yield('content') and replace it with... 
    <h1> Hello World </h1> 
@stop 

现在,如果你有很多的布局和你想要与它共享内容,可以通过编程方式实现远离刀片。以此为例

假设我们有master.blade.php

<html> 
    <head> 
     <title>Master</title< 
    </head> 
    <body> 
     @yield('content') 
    </body> 
</html> 

,我们有master2.blade.php

<html> 
    <head> 
     <title>Master 2</title> 
    </head> 
    <body> 
     @yield('content') 
    </body> 
</html> 

,我们有page.blade.php

@section('content') 
    <h1>Hello World</h1> 
@stop 
// note that we have no @extends() 

现在在控制器中,我们这样做,因为这两个布局产生在@yield(“内容”)

+0

感谢的内容,但请注意,我们使用$布局 - >内容本

if($cond) { $layout = view('master'); } else { $layout = view('master2'); } $page = view('page'); $layout->content = $page; return $layout; 

注意我问题不在于这个问题。这是关于在官方文件中找到这些东西的。你能指出我解释这个的Laravel文档吗? – user585936

相关问题