В чем отличие @yield от @show разве они не выполняют одно и то же действие?
- 19,872
- 2,207
1 Answers
Нет. У этих директив разное назначение.
@show, как и @endsection, используется для обозначения конца секции.
@show выводит содержимое секции на экран, сразу после объявления секции.
@endsection не делает ничего, кроме обозначения конца объявления секции.
@show и @endsection не могут существовать без предшествующей директивы @section.
@yield используется для вывода содержимого секции с определенным именем.
Эта директива вполне может существовать без предшествующей директивы @section, если та, например, была объявлена в одном из дочерних шаблонов.
Возможен вариант использования @yield, когда секция с указанным именем вообще не была объявлена, тогда надо передать в нее второй параметр, который будет служить значением по умолчанию.
Пример шаблона:
<html>
<head>
<title>Мое приложение @yield('non-existent-section', 'работает')</title>
</head>
<body>
@section('displayed-content')
Это содержимое секции, которое будет сразу выведено на экран.
@show
@section('declared-content')
Это содержимое секции, для вывода которого надо использовать @yield
@endsection
<div class="content">
<!-- выводим содержимое секции declared-content на экран -->
@yield('declared-content')
</div>
</body>
</html>
Пример итогового файла:
<html>
<head>
<title>Мое приложение работает</title>
</head>
<body>
Это содержимое секции, которое будет сразу выведено на экран.
<div class="content">
<!-- выводим содержимое секции declared-content на экран -->
Это содержимое секции, для вывода которого надо использовать @yield
</div>
</body>
</html>
В чем отличие @endsection от @stop
Как говорится в этом сообщении на SO:
Существует авторитетный ответ от Taylor Otwell
Директива
@endsectionстала@stopв L4, а@yieldSectionстала@show.
Оригинальная цитата Taylor Otwell на github.
В Laravel 5 можно использовать любой из вариантов: @endsection или @stop.
Отличий в функционале нет, это одно и то же.
- 19,872
-
Разве вместо endsection не используется stop? – quaresma89 Mar 01 '16 at 23:07
-
@quaresma89, я дополнил ответ – VenZell Mar 01 '16 at 23:19