Лезвие ларавеля: можете ли вы получить частичный

Если у меня есть макет под названием RightSideBar.blade.php в RightSideBar.blade.php Laravel blade, один yield('content') области yield('content') и другой yield('sidebar').

Есть ли встроенный способ отображения default partial если у представления, расширяющего RightSideBar, нет section('sidebar')?

Я знаю, что вы можете передать значение по умолчанию, просто интересно, есть ли способ сделать дефолт частичным.

Ответ 1

Да, вы можете передать значение по умолчанию

Просматривая документацию

@yield('sidebar', 'Default Content');

Который в основном помещает вывод по умолчанию, когда дочерний шаблон не имеет @section('sidebar')

Ответ 2

В большинстве случаев мы хотим иметь несколько строк по умолчанию, мы можем использовать этот синтаксис:

@section('section')
    Default content
@show

Например, у меня есть это в файле шаблона:

@section('customlayout')
    <article class="content">
        @yield('content')
    </article>
@show

Вы можете увидеть разницу между @show и @stop/@endsection: приведенный выше код эквивалентен приведенному ниже:

@section('customlayout')
    <article class="content">
        @yield('content')
    </article>
@stop

@yield('customlayout')

В других файлах просмотра я могу либо установить только контент:

@section('content')
    <p>Welcome</p>
@stop

Или я также могу установить другой макет:

@section('content')
    <p>Welcome</p>
@stop
@section('defaultlayout')
    <div>
        @yield('content')
    </div>
@stop

@stop эквивалентен @endsection.

Ответ 3

Хотя в документах указано значение по умолчанию только в виде строки, фактически вы можете передать представление

@yield('sidebar', \View::make('defaultSidebar'))

Ответ 4

В Laravel 5.2 добавлена директива @hasSection которая проверяет, определен ли раздел в представлении. Это не упомянуто в 5.3 или 5.4 документах по некоторым причинам.

@hasSection('sidebar')
    @yield('sidebar')
@else
    @yield('default-sidebar')
@endif