繁体   English   中英

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

[英]Laravel 4 - including a “partial” view within a view (without using Blade template)

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

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

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

在版本4中这等效于什么?

我试过了

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

这行不通。

如果我做

@include('partials.header')

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

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

在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);
}

...

视图

您可以按如下方式包括上述部分内容(在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>

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


为简单起见

实际上,比使用上面的方法要简单得多:只需将其包含在视图的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>

确保局部文件的文件夹结构为[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模板代码的解决方案。

祝好运 :)

您可以将局部视图嵌套在视图中

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

然后以这种方式从模板{{ $anyname }}访问嵌套视图文件,而不必在视图中包括文件,这也适用于.php文件。

自从发布以来,我不确定在这篇文章中有多少人使用过Laravel 4,但是如果您希望包含局部视图或分离视图类型,可以使用@includes来完成。

例如,如果您想为页眉,页脚,侧边栏等添加局部文件夹

在下面创建局部目录

app/views/partials

然后创建一个局部

app/views/partials/navigation.blade.php

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

@include('partials.navigation')

这就是全部。

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

我知道这是一个较晚的答案,但我认为,因为在其他答案中我看不到这种解决方案是可以的。

如果要在每个页面上都包含页眉和页脚,则可以将它们添加到before和after过滤器中。 只需转到您应用程序文件夹中的filters.php

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

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

这样一来,您无需在视图文件中添加任何内容即可将其包括在内。

您可以使用View的nest函数

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

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

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

在您的意见/ default / header.blade.php上

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

我对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; ?>

从一个视图中,只需回显另一个视图:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM