Страницы

Поиск по вопросам

пятница, 5 октября 2018 г.

В чем отличие @yield от @show?

В чем отличие @yield от @show разве они не выполняют одно и то же действие?


Ответ

Нет. У этих директив разное назначение.
@show, как и @endsection, используется для обозначения конца секции.
@show выводит содержимое секции на экран, сразу после объявления секции. @endsection не делает ничего, кроме обозначения конца объявления секции. @show и @endsection не могут существовать без предшествующей директивы @section.
@yield используется для вывода содержимого секции с определенным именем. Эта директива вполне может существовать без предшествующей директивы @section, если та, например, была объявлена в одном из дочерних шаблонов. Возможен вариант использования @yield, когда секция с указанным именем вообще не была объявлена, тогда надо передать в нее второй параметр, который будет служить значением по умолчанию.

Пример шаблона:
Мое приложение @yield('non-existent-section', 'работает') @section('displayed-content') Это содержимое секции, которое будет сразу выведено на экран. @show
@section('declared-content') Это содержимое секции, для вывода которого надо использовать @yield @endsection

@yield('declared-content')

Пример итогового файла:
Мое приложение работает Это содержимое секции, которое будет сразу выведено на экран.
Это содержимое секции, для вывода которого надо использовать @yield


Подробнее в документации

В чем отличие @endsection от @stop
Как говорится в этом сообщении на SO:
Существует авторитетный ответ от Taylor Otwell
Директива @endsection стала @stop в L4, а @yieldSection стала @show
Оригинальная цитата Taylor Otwell на github
В Laravel 5 можно использовать любой из вариантов: @endsection или @stop Отличий в функционале нет, это одно и то же.

Комментариев нет:

Отправить комментарий