【问题标题】:What is the proper way to include a partial view in Laravel 5?在 Laravel 5 中包含局部视图的正确方法是什么?
【发布时间】:2015-10-01 15:57:54
【问题描述】:

我正在尝试为我们的用户创建一个表单来更新帐户信息。我构建了一个包,以便用户可以创建自定义列表来选择资格以显示在他们的个人资料中。我为自定义列表创建了一个局部视图,该视图循环遍历该实体类型的所有列表以获取要在表单上显示的列表。

我遇到的问题是 @include() 仅在我将其放入 @section('content) 区域时才有效,但随后包含刀片的其余内容未显示,仅显示包括。如果我将包含放在它自己的部分中,它不会显示。

将包含在与我的其余代码相同的部分中,如下所示:

@extends($layout)

@section('content')
<form>
     <label>Name</Label>
     <input type="text" name="first_name">

     <label>Last Name</Label>
     <input type="text" name="last_name">

     <label>Email</Label>
     <input type="text" name="email_address">
</form>
@include('Package::path.to.partial')
@endsection

结果如下:

<html>
     <body>
          <div class="container-fluid>
               <Partial Package Code>
          </div>
     </body>
</html>

如果我在它自己的部分中有包含,如下所示,则仅显示“内容”部分中的内容:

@extends($layout)

@section('content)
<form>
     <label>Name</Label>
     <input type="text" name="first_name">

     <label>Last Name</Label>
     <input type="text" name="last_name">

     <label>Email</Label>
     <input type="text" name="email_address">
</form>
@endsection
@section('custom_list')
     @include('Package::path.to.partial')
@endsection

结果如下:

<html>
     <body>
          <div class="container-fluid">
                 <form>
                      <label>Name</Label>
                      <input type="text" name="first_name">

                      <label>Last Name</Label>
                      <input type="text" name="last_name">

                      <label>Email</Label>
                      <input type="text" name="email_address">
                 </form>
          </div>
     </body>
</html>

【问题讨论】:

  • 真的很难从描述中理解您的设置。可以发一些代码吗?
  • @MartinBean 抱歉,添加了详细信息!谢谢。

标签: php laravel-5 blade


【解决方案1】:

如果我在它自己的部分中有包含,如下所示,则只显示“内容”部分中的内容

这是意料之中的。您正在重新定义部分中的 content 部分,因此它只会覆盖该部分的内容。相反,部分内容应该是这样的:部分内容。因此,只需在部分 Blade 模板中添加您想要的任何标记,就像使用普通 PHP 一样。

【讨论】:

    【解决方案2】:

    该包的部分视图定义了它自己的@section('content')

    在第一种情况下,包的 content 部分覆盖了您的部分。使用这样一个通用名称的包实在是太糟糕了。

    在第二个中,它没有显示,因为您正在定义 custom_list 部分,但您没有在任何地方产生它的内容。您需要将@yield('custom_list') 添加到您的布局模板中。

    不幸的是,这仍然无法解决您的问题,因为 content naming conflict still exists

    最好的办法是将您的部分重命名为其他名称。

    @section('app')
        <... your fields ...>
    
        @include('Package::path.to.partial')
    
        @yield('content')
    @stop
    

    更新您的布局模板以生成新的部分名称

    @yield('app')
    

    更好的是,分叉该软件包,将其部分名称更改为 [package_name]:content 并提交拉取请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2021-08-29
      • 2021-03-21
      • 2019-07-28
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多