Двойная проверка в @yield в Blade-шаблонах Laravel

Как известно, что конструкция @yield может принимать два аргумента - название секции и значение по умолчанию, если в шаблоне, который наследует - секция не определена.

Мне же нужно смочь как-то реализовать более расширенный функционал, что-то в виде:

<meta property="og:description" 
      content="@yield('og-description','description', 'Default')" />

Т.е. если секция og-description определена - выводится она, если нет - проверяется секция description, и если она определена выводится она. В противном случае выводится значение по умолчанию Default.

Голову ломал и придумал вот какой "костыль":

<meta property="og:description" 
      content="@include('chunks.chunk-description')" />

Содержимое файла resources/views/chunks/description-chunk.blade.php:

@php
$has_ogdescription = 0;
@endphp

@hasSection('og-description')
@php
$has_ogdescription = 1;
@endphp
@endif

@hasSection('description')
@php
if ($has_ogdescription != 1) $has_ogdescription = 2;
@endphp
@endif

@if ($has_ogdescription == 1)
@yield('og-description')
@else
@yield('description','Default')
@endif

В принципе вопрос решен. Но решение мне очень-очень не нравится! Хотелось бы что-то более изящное.

Вопрос: как такое сделать более компактно, более функционально?

И попутно еще два мелких смежных вопроса:

  1. Как в @php-блоке вызвать что-то типа @hasSection('название секции')?
  2. Как в @php-блоке получить содержимое @section('название секции')?

Ответы (1 шт):

Автор решения: Web Desg

{{ 'og-description' ?? 'description' }}

По поводу секций, у Вас нарушена логика приложения.

@if ($has_ogdescription == 1)
@yield('og-description')
@else
@yield('description','Default')
@endif

Особенно здесь.

→ Ссылка