【问题标题】:Laravel 4 - including a "partial" view within a view (without using Blade template)Laravel 4 - 在视图中包含“部分”视图(不使用 Blade 模板)
【发布时间】:2013-06-18 03:44:10
【问题描述】:

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

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

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

在版本 4 中相当于什么?

我试过了

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

这不起作用。

如果我这样做

@include('partials.header')

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

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

【问题讨论】:

  • 您可以将子视图分配给父视图的变量,如果要加载子视图,则使用视图编辑器。否则你需要去刀片并使用模板系统
  • 所以现在没有直接的方法来包含“部分”PHP?
  • 我还没有使用过 L4,所以我不是这里的专家,但是浏览文档我什么也没看到。无论如何,我相信使用本机 include() 可以正常工作,但是您需要编写常规路径,而不是“laravel”路径(即使用斜线而不是点)
  • @ericbae 您能否选择/标记已接受的答案:) 谢谢

标签: php laravel laravel-4


【解决方案1】:

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

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

祝你好运:)

【讨论】:

  • 添加了“并将 header.php 重命名为 header.blade.php”注释!
  • 这是一种不好的做法,不建议通过视图传递数据。
  • 查看此link 以获得不同的解决方案。
  • 这样做不是不好的做法吗? 早些时候有人告诉我不要这样做。
【解决方案2】:

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

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

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

【讨论】:

  • 这个解决方案虽然使用 Blade 模板(提问者试图避免)... 0.o
【解决方案3】:

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

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

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

app/views/partials

然后创建一个局部

app/views/partials/navigation.blade.php

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

@include('partials.navigation')

仅此而已。

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

【讨论】:

  • @include( 'partials.navigation', array( 'foo' =&gt; 'bar' ) ) 将数据传递给部分
【解决方案4】:

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

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

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

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

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

【讨论】:

    【解决方案5】:

    可以使用View的嵌套功能

    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>
    

    【讨论】:

      【解决方案6】:

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

      【讨论】:

      【解决方案7】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-03-12
        • 2018-06-08
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 2013-01-18
        • 2020-08-27
        • 2017-06-18
        • 2018-10-09
        相关资源
        最近更新 更多