Laravel 4 - 包括" partial"在视图中查看(不使用Blade模板)

时间:2013-06-21 05:01:34

标签: php laravel laravel-4

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

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

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

版本4中的等效内容是什么?

我试过

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

这不起作用。

如果我这样做

@include('partials.header')

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

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

7 个答案:

答案 0 :(得分:24)

在Laravel 4的视图中包含视图有多种方法。您的选择将取决于下面列出的任何一个结果...

灵活性

您可以在相应的Controller中编译(渲染)部分视图,并使用$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>

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


For Simplicity

实际上比使用上述方法更简单:只需将其包含在视图的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模板代码的解决方案。

祝你好运:)

答案 1 :(得分:9)

您可以在视图中嵌套您的部分尝试此

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

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

答案 2 :(得分:8)

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

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

下创建部分目录
app/views/partials

然后创建一个部分

app/views/partials/navigation.blade.php

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

@include('partials.navigation')

这就是全部。

**奖励您还可以将数据传递给部分

中的部分或包含嵌套部分

答案 3 :(得分:5)

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

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

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

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

以这种方式执行此操作时,您无需在视图文件中添加任何内容以包含它们。

答案 4 :(得分:3)

您可以使用View的嵌套功能

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

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

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

在您的views / default / header.blade.php

<div>hey {{ $name }}! {{ $test }}</div>

答案 5 :(得分: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; ?>

答案 6 :(得分:0)

在视图中,只需回显其他视图:

echo View::make('header'); //This will look for a view called header.php