2017-01-28 64 views
11

我在学习Laravel(从版本5.3开始),这两个看起来非常相似,我知道的唯一区别是@include注入父变量并且还可以发送其他变量。Laravel的@yield和@include有什么区别?

  • @yield和@include有什么区别?
  • 什么时候应该使用@yield?
  • 什么时候应该使用@include?

回答

8

@yield主要用于在布局中定义节。当使用@extends扩展该布局时,您可以使用视图中的@section指令定义该部分中的内容。

布局通常包含您的HTML,头部,正文,页眉和页脚。您可以定义布局内的区域(@yield),其扩展模板页面将会把自己的内容

在你的主模板定义的区域。例如:

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

比方说,您的主页上扩展了布局

@extends('layouts.app') 

@section('content') 
    // home page content here 
@endsection 

您在“内容”部分在您的主页视图中的内容部分定义的任何HTML将被注入到布局它在那个地方延伸。

@include用于可重复使用的HTML就像一个标准的PHP包括。它没有像@yield和@section那样的父/子关系。

我强烈建议阅读上的Laravel网站刀片模板的文档更全面地了解

https://laravel.com/docs/5.0/templates

+4

你的回答并不是真正的问题。你刚刚说的是'@ yield'和'@ include'都将HTML注入到父文件中。 Laravel文档也很差。不针对laravel新人。 '@ yield'和'@ include'之间的主要区别是:'@ include'定义了** view **来注入父项。 '@ yield'定义**部分**被注入。 '@ yield'只有在您的视图'@ extends'父视图时才起作用。 – user1651105

3

@include@yield是两种完全不同类型的操作导入代码进入当前文件。

@include - 将单独文件的内容导入当前文件的放置位置。即:

布局文件:

< some html or other script > 

@include('include.file_name') // "include." indicates the subdirectory that the file is in 

< more html or other script > 

包含文件(具有一个代码块的叶片文件):

< some cool code here > 

'FILE_NAME'(也叶片的内容文件)然后导入到@include指令所在的位置。

@yield从子文件(“查看”刀片文件)中的“部分”导入代码。:

布局文件:

< some html or other script > 

@yield('needed_section_name') 

< more html or other script > 

需要在它被设置为“扩展”该布局文件中的“视图”刀片文件下面的部分。

“查看”刀片文件:

@extends('layout.file_name') 
... code as neeeded 

@section('needed_section_name') 
< some cool code here > 
@stop 

... 
more code as needed 

现在布局文件将在代码中使用的命名相匹配的部分进口。

关于这个问题的更多信息here ....

相关问题