13

在 Laravel 3 中,我曾经这样做过。

<?php render('partials.header'); ?>

这是在“PHP”视图中完成的,没有使用 Laravel 的 Blade 模板。

在版本 4 中相当于什么?

我试过了

<?php @include('partials.header'); ?>

这行不通。

如果我做

@include('partials.header')

我必须将我的文件保存为“.blade.php”

如何在不使用刀片模板的情况下包含“子视图”?

4

7 回答 7

24

在 Laravel 4 中,有多种方法可以在视图中包含视图。您的选择将取决于下面概述的任何一种结果......

灵活性

您可以在适当的控制器中编译(渲染)$data['']部分视图,并使用数组 将这些视图传递给主视图。

随着观看次数的增加,这可能会变得乏味,但是嘿,至少有很大的灵活性:)

有关示例,请参见下面的代码:

控制器

...

public function showMyView()
{
   /* Header partial view */
   $data['header'] = View::make('partials.header');

   /* Flexible enough for any kind of partial views you require (e.g. a Header Menu partial view) */
   $data['header_menu'] = View::make('partials.header_menu'); 

   /* Footer partial view */
   $data['footer'] = View::make('partials.footer');

   return View::make('myView', $data);
}

...

看法

您可以按如下方式包含上述部分(在您的视图代码中的任何位置):

<html>  
<head></head>   
<body>

<!-- include partial views -->
<?php echo ($header) ?>  
<?php echo ($header_menu) ?>  

<div id="main-content-area"></div>  

<?php echo ($footer) ?>  

</body>  
</html>

您的部分视图现在将添加到您的主视图中。


为了简单

实际上有一种比使用上述方法更简单的方法:只需将其包含在视图的 html 中...

看法

<html>  
<head></head>   
<body>

<!-- include partial view: header -->
<?php echo View::make('partials.header') ?>

   <div id="main-content-area">
   </div>

<!-- include partial view: footer -->
<?php echo View::make('partials.footer') ?>

</body>  
</html>

确保 partials 的文件夹结构是[views/partials/header.php]以便为 Laravel 的 View::make() 函数提供正确的文件路径。

警告

如果您尝试$data['page_title']在控制器中传递,嵌套视图将不会接收数据。
要将数据传递给这些嵌套视图,您需要这样做:

<html>  
<head></head>   
<body>

<?php
   /* Pass page title to header partial view */
   $data ['page_title'] = "My awesome website";  
   echo View::make('partials.header', $data); 
?>

<div id="main-content-area"></div>

<?php echo View::make('partials.footer') ?>

</body>  
</html>

笔记

问题明确指出:“不使用 Blade 模板”,因此我确保提供不包含任何 Blade 模板代码的解决方案。

祝你好运 :)

于 2013-08-07T13:55:57.930 回答
9

您可以将部分嵌套在视图中试试这个

View::make('folder.viewFile')->nest('anyname', 'folder.FileName');

然后从您的模板访问嵌套视图文件,{{ $anyname }}这样您就不必在视图中包含文件,这也适用于 .php 文件。

于 2013-06-21T19:50:17.070 回答
9

我不确定自从这篇文章以来有多少人在这篇文章中使用 Laravel 4,但如果你想包含部分视图或分离你的视图类型,你可以使用 @includes

例如,如果您想要一个用于页眉、页脚、侧边栏等的部分文件夹

为下面的部分创建一个目录

app/views/partials

然后创建一个部分

app/views/partials/navigation.blade.php

然后在您的主模板文件中添加该行

@include('partials.navigation')

仅此而已。

** 您还可以将数据传递给部分或在部分中包含嵌套的部分

于 2014-07-02T14:02:39.433 回答
5

我知道这是一个迟到的答案,但我认为因为我没有在其他答案中看到这个解决方案,所以没关系。

如果您想在每个页面上包含页眉和页脚,我会将它们添加到之前和之后的过滤器中。只需转到您的应用程序文件夹中的 filters.php

App::before(function($request)
{
    echo View::make('partials.header');
});

App::after(function($request, $response)
{
    echo View::make('partials.footer');
});

这样做时,您不需要在视图文件中添加任何内容来包含它们。

于 2014-01-11T16:10:10.263 回答
3

您可以使用视图的嵌套功能

View::make('default.layout')->nest('header', 'default.header');

使用第三个参数将数据传递给模板

View::make('default.layout')->nest('header', 'default.header', ['name' => 'John Doe', 'test' => 'It works!']);

在你的意见/默认/header.blade.php

<div>hey {{ $name }}! {{ $test }}</div>
于 2014-07-13T21:11:43.290 回答
1

我对 Laravel 还是很陌生,但我认为下面的内容非常理想......

Route::get('/', function()
{
    $data['title'] = 'sample';
    return View::make('page', $data);
});

# /views/partials/header.php
# /views/partials/footer.php
View::composer('page', function($view)
{
    $view->with('header', View::make('partials.header', $view->getData()));
    $view->with('footer', View::make('partials.footer', $view->getData()));
});

请参阅 Laravel View Composers .. http://laravel.com/docs/responses#view-composers

/views/page.php

<?php echo $header; ?>
<div>CONTENT</div>
<?php echo $footer; ?>
于 2013-11-30T18:49:06.730 回答
0

从一个视图中,只呼应另一个视图:

echo View::make('header'); //This will look for a view called header.php
于 2014-10-15T05:21:34.770 回答