如何在Blade模板中包含子视图?

94

我正在尝试使用Laravel建立一个网站,但是我遇到了一些基础问题,而文档并没有涵盖这些问题。

在这种情况下,我看到文档说我可以通过使用@include('view.name')将一个视图包含在另一个视图中。那么,view.name是什么?它保存在哪里?我尝试创建一个名为app/views/view.name.blade.php的文件,但它没有被读取。文件名如何映射到blade名称?

5个回答

288

你可以使用Blade模板引擎:

@include('view.name') 

'

view.name'会存在你的主视图文件夹中:

'
// for laravel 4.X
app/views/view/name.blade.php  

// for laravel 5.X
resources/views/view/name.blade.php

另一个例子

@include('hello.world');

会显示以下视图。
// for laravel 4.X
app/views/hello/world.blade.php

// for laravel 5.X
resources/views/hello/world.blade.php

另一个例子

@include('some.directory.structure.foo');

将显示以下视图

// for Laravel 4.X
app/views/some/directory/structure/foo.blade.php

// for Laravel 5.X
resources/views/some/directory/structure/foo.blade.php

基本上,点符号表示目录层次结构以及视图名称,相对于Laravel 4.x中的app/views文件夹或Laravel 5.x中的resources/views文件夹。 补充说明: 如果您想传递参数:@include('view.name', array('paramName' => 'value')) 然后,您可以在视图中这样使用值:<p>{{$paramName}}</p>

4
为了传递参数:@include('partial', array("variable" => "value"))。 - S..
2
我该如何从除了“views”文件夹以外的任何其他文件夹中进行包含? - itsazzad
2
你可能需要用自己的实现来覆盖 Laravel 中的某个服务提供者。除非你有一个非常好的理由去改变视图文件夹,否则我不会去烦恼它:这样做太麻烦了,而且收益不大。 - GWed
@Sam 这个不行,variable 在 Laravel 5.3 中未定义。 - Volatil3
@itsazzad 你可以设置不同的文件夹,查看这个答案 - Scofield
赞了。但还有一件事。如果你在循环内传递值,它看起来像这样:@include('layouts.polygon',[ 'field'=> $value])。对于新创建的 blade 模板视图要使用,我删除了 <?php 然后它就正常工作了。 - CodeToLife

36

编辑:以下是2014年首选的解决方案。如今您应该使用@include,如其他答案中提到的那样。


Laravel视图中使用点作为文件夹分隔符。 例如,我有这段代码:

return View::make('auth.details', array('id' => $id));

该语句指向app/views/auth/details.blade.php

要在视图中包含一个视图,您可以这样做:

文件:layout.blade.php

<html>
  <html stuff>
  @yield('content')
</html>

文件:hello.blade.php

@extends('layout')

@section('content')
  <html stuff>
@stop

14

从 Laravel 5.6 开始,如果您有这种结构并且想在子文件夹中包含另一个 Blade 文件:

|--- views

|------- parentFolder(文件夹)

|---------- name.blade.php(Blade 文件)

|---------- childFolder(文件夹)

|-------------- mypage.blade.php(Blade 文件)

name.blade.php

  <html>
      @include('parentFolder.childFolder.mypage')
  </html>

1
在Laravel中,还有一个有趣的目录结构情况,继续@ gwed的出色回答:
@include('hello.world')

显示以下视图:
// for laravel 5.X
resources/views/hello/world/index.blade.php

1

如果文件不在子文件夹中

@include('视图名称')

如果文件在子文件夹中

@include('folder1.folder2.view_name')


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接