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

问题描述 投票:0回答:5

我正在尝试使用 laravel 建立一个站点,但我真的很难处理文档没有涵盖的基本内容。

在这种情况下,我看到它说我可以使用

@include('view.name')
将一个视图包含在另一个视图中。 view.name 是什么?它保存在哪里?我尝试创建一个文件
app/views/view.name.blade.php
,但没有被读取。文件名如何映射到刀片名称?

laravel laravel-blade templating
5个回答
281
投票

可以使用刀片模板引擎:

@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>


36
投票

编辑:以下是 2014 年的首选解决方案。现在您应该使用

@include
,如other answer中所述。


在 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 开始,如果你有这种结构并且你想在子文件夹中包含另一个刀片文件,

|--- 浏览量

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

|------------ name.blade.php(刀片文件)

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

|---------------- mypage.blade.php(刀片文件)

名称.blade.php

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

0
投票

laravel 中目录结构的一个更有趣的情况,跟进@gwed 很好的答案:

@include('hello.world');

将显示以下视图:

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

0
投票

将一个刀片文件包含到另一个刀片文件中 或者 如何在 Blade 模板中包含子视图?


如果文件不在子文件夹中

@include('view_name')

如果文件在子文件夹中

@include('folder1.folder2.view_name')

© www.soinside.com 2019 - 2024. All rights reserved.