在Laravel 5中包含局部视图的正确方法是什么?

时间:2015-10-01 15:57:55

标签: php laravel-5 blade

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

我遇到的问题是@include()仅在我将其放入@section('内容)区域时才有效,但是包含刀片的其余内容不是只显示了所包含的内容。如果我把include放在它自己的部分,它就不显示。

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

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

如果我在其中包含了自己的内容,如下所示,那么只有&#34;内容&#34;部分显示:

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

2 个答案:

答案 0 :(得分:0)

  

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

这是可以预料的。您正在重新定义部分中的content部分,因此它将覆盖该部分的内容。相反,部分应该是:部分内容。因此,只需将您想要的任何标记放在部分Blade模板中,就像使用vanilla PHP一样。

答案 1 :(得分:0)

该软件包的部分视图定义了自己的@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')

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