Как правильно включить частичное представление в Laravel 5?

Я пытаюсь создать форму для наших пользователей для обновления информации об учетной записи. У меня есть пакет, созданный для того, чтобы пользователи могли создавать настраиваемые списки, чтобы выбирать квалификации для отображения в своих профилях. У меня есть частичное представление, созданное для пользовательских списков, которое перебирает все списки для этого типа объекта, чтобы получить, какие из них отображать в форме.

Проблема, с которой я сталкиваюсь, заключается в том, что @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>

person Shannon Phillips    schedule 01.10.2015    source источник
comment
Трудно понять вашу настройку по описанию. Можете ли вы опубликовать код, пожалуйста?   -  person Martin Bean    schedule 01.10.2015
comment
@MartinBean Извините, добавил подробности! Спасибо.   -  person Shannon Phillips    schedule 01.10.2015


Ответы (2)


Если у меня есть включение в свой собственный раздел, как показано ниже, отображается только то, что находится в разделе «контент».

Этого следовало ожидать. Вы переопределяете раздел content в своем партиале, поэтому он просто переопределит содержимое этого раздела. Вместо этого партиалы должны быть именно такими: частичный контент. Так что просто поместите любую разметку, которую вы хотите, в свой неполный шаблон Blade, как в ванильном PHP.

person Martin Bean    schedule 01.10.2015

Частичное представление этого пакета определяет собственное @section('content').

В первом сценарии раздел content пакета переопределяет ваш. Довольно паршиво для этого пакета использовать такое общее имя.

Во втором он не отображается, потому что вы определяете раздел custom_list, но нигде не передаете его содержимое. Вам нужно добавить @yield('custom_list') в шаблон макета.

К сожалению, это все равно не решит вашу проблему, потому что content название конфликт все еще существует.

Лучше всего переименовать свой раздел во что-то другое.

@section('app')
    <... your fields ...>

    @include('Package::path.to.partial')

    @yield('content')
@stop

Обновите шаблон(ы) макета, чтобы получить новое название раздела.

@yield('app')

А еще лучше разветвите этот пакет, измените имя раздела на [package_name]:content и отправьте запрос на включение.

person andrewtweber    schedule 01.12.2015