【问题标题】:Using Laravel, how can I pass an include as an argument for another include?使用 Laravel,如何将包含作为另一个包含的参数传递?
【发布时间】:2015-08-21 02:30:43
【问题描述】:

我使用的是 Laravel 4.2,并且我的页面上有多个引导框。我想将它们与一些将插入其中的参数一起包含在一个文件中,这样我就不需要每次都为这些框重复相同的代码。

控制器

$box_options = array(
    'icon_classes' => 'fa fa-pie-chart',
    'box_title' => 'Browser Usage',
    'box_footer_text' => 'View More Visitor Data'
  );

return View::make('index')->with('box_options', $box_options);

box.blade.php(包含文件)

<div class="box box-default">
  <div class="box-header with-border">
    <h3 class="box-title">
      <i class="{{ $icon_classes }}"></i> {{ $box_title }}
    </h3>
  </div><!-- /.box-header -->

  <div class="box-body">
    <div class="row">
      @include('includes.global.pie_chart', $browser_usage_pie_chart_options)
    </div><!-- /.row -->
  </div><!-- /.box-body -->

  @if($box_footer_text)
    <div class="box-footer text-center">
      <a href="javascript::;" class="uppercase">{{ $box_footer_text }}</a>
    </div><!-- /.box-footer -->
  @endif
</div><!-- /.box -->

我需要框体的内容是动态的,所以它可以是一个字符串或另一个包含文件或两者的组合。如果它只是一个字符串,我可以像使用其他变量一样轻松地将它传递给控制器​​,但我需要它能够在那里放置一个包含文件,除了它可以有许多不同的包含文件.

如何将包含作为另一个包含的参数传递?还是有另一种我没有考虑过的完全不同的方法?

【问题讨论】:

  • AFAIK,视图中可访问的所有变量也可以在视图内的所有包含中访问。不太确定这是否是你要找的东西
  • 感谢您的回复,但这不是我要问的。我正在尝试将任何内容放入正文中,无论它是我传入的字符串还是另一个包含文件。
  • 您可以使用layouts。将框体中的include 替换为yield('box-content'),在includes.global.pie_chart 的顶部添加@extends('box.blade.php'),并将其所有其他内容包装到@section('box-content') ... @stop。现在结束,您可以在需要的位置添加includes.global.pie_chart,它将被包装到盒子中。
  • @AnatoliyArkhipov 我不太关注,但我认为您可能正在做一些事情。您介意在下面提供答案以及示例代码,以便我查看吗?
  • 是的,在这种情况下@layout 不是你要找的

标签: php laravel laravel-4 blade


【解决方案1】:

@include() 类似于 php include "";,因此变量的范围不会改变,您可以在不传递 includes.global.pie_chart 的情况下访问 box.blade.php 的变量。 因为范围没有改变,你可以这样做:

return view('box', "browser_usage_pie_chart_options" => $browser_usage_pie_chart_options):

在你看来box.blade.php有:

@include('includes.global.pie_chart')

includes.global.pie_chart 中这样称呼它:

{{ $browser_usage_pie_chart_options }}

如果您的包含被多次使用并且有时该变量不存在,我建议在打印之前检查它是否存在@if(isset($browser_usage_pie_chart_options))

【讨论】:

  • 你的意思是$browser_usage_pie_chart_options 可以是一个代码或一个字符串,取决于控制器发送什么?
  • 不完全是。框体内的内容可以是字符串,也可以包含任何文件。
  • 只是提醒您,您可能会在网络教程中找到:return view('box', compact('browser_usage_pie_chart_options')): 与 Carlos 所说的相同,但方式不同。
【解决方案2】:

喜欢这个

@include("part.dateTemplate",["name" => "pr_date"])
 
// dateTemplate
  {{ $name }} // pr_date

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2021-03-22
    • 2021-03-20
    • 2011-05-17
    • 2014-12-25
    相关资源
    最近更新 更多