Какая разница между Laravel @yield и @include?
Я изучаю Laravel (начиная с версии 5.3), и эти два очень похожи, единственная разница, которую я знаю, это то, что @include вводит родительские переменные и может также отправлять другие переменные.
- Какая разница между @yield и @include?
- Когда следует использовать @yield?
- Когда следует использовать @include?
Ответы
Ответ 1
@yield в основном используется для определения раздела в макете. Когда этот макет расширен с помощью @extends, вы можете определить, что находится в этом разделе с директивой @section в ваших представлениях.
Обычно макет содержит ваш HTML, head, body, верхний и нижний колонтитулы. Вы определяете область (@yield) в макете, которую ваши страницы, расширяющие шаблон, помещают их содержимое.
В шаблоне мастера вы определяете область. Например:
<body>
@yield('content')
</body>
Допустим, ваша домашняя страница расширяет этот макет
@extends('layouts.app')
@section('content')
// home page content here
@endsection
Любой HTML, который вы определяете в разделе контента на домашней странице в разделе "контент", будет введен в макет, который он расширил в этом месте.
@include используется для повторного использования HTML, как и стандартный PHP. У него нет таких отношений между родителями и детьми, как @yield и @section.
Я настоятельно рекомендую прочитать документацию на Blade Templates на сайте Laravel для более полного обзора
https://laravel.com/docs/5.0/templates
Ответ 2
@include и @yield - два совершенно разных типа операций для импорта кода в текущий файл.
@include - импортировать содержимое отдельного файла в текущий файл в том месте, где оно размещено. то есть:
Файл макета:
< some html or other script >
@include('include.file_name') // "include." indicates the subdirectory that the file is in
< more html or other script >
Включить файл (файл клика с блоком кода):
< some cool code here >
Содержимое "file_name" (также файл клика) затем импортируется, где находится директива @include.
@yield импортирует код из "раздела" в дочернем файле (файл "view"), т.е.
Файл макета:
< some html or other script >
@yield('needed_section_name')
< more html or other script >
В файле "view" blade файла, который настроен на "расширение" этого файла макета, необходим следующий раздел.
"Просмотр" файла клинка:
@extends('layout.file_name')
... code as neeeded
@section('needed_section_name')
< some cool code here >
@stop
...
more code as needed
Теперь файл макета будет импортироваться в раздел кода, который соответствует используемому имени.
Подробнее об этом здесь....
Ответ 3
Разница между @yield
и @include
заключается в том, как вы их используете.
Если у вас есть статический вид контента, например navbar, эта часть страницы всегда будет в одном месте в макете. Когда вы используете @include
в файле макета, navbar будет помещаться один раз для макета. Но если вы используете @yield
вы будете принуждены к тому, чтобы сделать @section
navbar на каждой странице, @extends
макет.
@yield
другой стороны, @yield
- лучший выбор, когда контент меняется на всех страницах, но вы все равно хотите использовать один и тот же макет везде. Если вы используете @include
вам нужно будет создать новый макет для каждой страницы из-за разницы в содержании.