Laravel 4 - 在视图中包含"部分"视图(不使用Blade模板)

eri*_*bae 13 php laravel laravel-4

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

<?php render('partials.header'); ?>
Run Code Online (Sandbox Code Playgroud)

这是在"PHP"视图中完成的,没有使用Laravel的Blade模板.

版本4中的等价物是什么?

我试过了

<?php @include('partials.header'); ?>
Run Code Online (Sandbox Code Playgroud)

这不起作用.

如果我做

@include('partials.header')
Run Code Online (Sandbox Code Playgroud)

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

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

Rob*_*ood 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);
}

...
Run Code Online (Sandbox Code Playgroud)

视图

您可以按如下方式在上面包含部分内容(在View代码中的任何位置):

<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>
Run Code Online (Sandbox Code Playgroud)

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


为了简单

实际上比使用上述方法更简单:只需将其包含在视图的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>
Run Code Online (Sandbox Code Playgroud)

确保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>
Run Code Online (Sandbox Code Playgroud)

注意

问题清楚地说明:"不使用Blade模板",所以我确保提供一个不包含任何Blade模板代码的解决方案.

祝好运 :)

  • 这是一种不好的做法,不建议通过视图传递数据. (2认同)

Moh*_*nju 9

你可以在视图中嵌套你的部分尝试这个

View::make('folder.viewFile')->nest('anyname', 'folder.FileName');
Run Code Online (Sandbox Code Playgroud)

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


phi*_*_us 8

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

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

为下的部分创建一个目录

app/views/partials
Run Code Online (Sandbox Code Playgroud)

然后创建一个部分

app/views/partials/navigation.blade.php
Run Code Online (Sandbox Code Playgroud)

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

@include('partials.navigation')
Run Code Online (Sandbox Code Playgroud)

这就是全部.

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

  • `@include('partials.navigation',array('foo'=>'bar'))`将数据传递给部分 (4认同)

Ole*_*Ole 5

我知道这是一个迟到的答案,但我想,因为我没有在其他答案中看到这个解决方案,这是好的.

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

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

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

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