Trả lời ngắn: Luôn sử dụng @yield
trừ khi bạn muốn làm điều gì đó phức tạp hơn, sau đó cung cấp mặc định string
.
dài trả lời: Cả @yield và @section .. @show được sử dụng để được ghi đè tùy chọn bất cứ khi nào bạn mở rộng mẫu lưỡi. Mọi thứ bạn có thể làm với @yield cũng có thể được thực hiện với @section .. @show nhưng không phải cách khác.Dưới đây là những gì họ làm:
@yield ('chính')
- có thể được thay thế bằng @section ('chính') .. @endsection
- có thể được cung cấp một chuỗi mặc định nhưng không có HTML! Chuỗi mặc định sẽ được hiển thị trong sub-blade-template khi không có @section ('main') .. @endection được cung cấp.
@section ('chính') .. @show
- có thể được thay thế bằng @section ('chính') .. @endsection
- có thể được cung cấp một mã HTML mặc định. Mã HTML mặc định sẽ được hiển thị trong sub-blade-template khi không có @section ('main') được cung cấp.
- Có thể được thay thế bằng @section ('main') @ parent .. @endsection và bổ sung hiển thị mã HTML mặc định.
Dưới đây một số ví dụ: test.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<h1>This is a test</h1>
@yield('mainA')
@yield('mainB', 'This is the alternative 1')
@yield('mainC', '<p>This is the alternative 2</p>')
@yield('mainD', 'This is the alternative 3')
@section('testA')
@show
@section('testB')
This is the alternative 4
@show
@section('testC')
<p>This is the alternative 5</p>
@show
@section('testD')
<p>This is the alternative 6</p>
@show
</body>
</html>
đây là một tập tin gọi là testA.blade.php
kéo dài file cánh khác:
@extends('test')
@section('mainD')
<div>
<p>First replacement!</p>
<hr>
</div>
@endsection
@section('testC')
<div>
<p>Second replacement!</p>
<hr>
</div>
@endsection
@section('testD')
@parent
<div>
<p>Additional content</p>
<hr>
</div>
@endsection
Và đó là kết quả:
Vì vậy, để làm móng ngôi nhà này - '@ yield' chỉ là một cách viết tắt cho một' @ section' không sử dụng @parent? Chính xác? – dayuloli
Có, bạn có thể đặt nó theo cách đó. '@ yield' luôn được sử dụng để lấy nội dung từ trang con tới trang chính. Vì vậy, khi Laravel thực hiện tệp blade của bạn, trước tiên nó sẽ kiểm tra xem bạn đã mở rộng bố cục chính chưa, nếu bạn đã mở rộng bố cục, nó sẽ chuyển sang bố cục chính và bắt đầu nhận '@ sections' mà bạn đã ghi đè và nội dung chính '@ yield' từ bố cục con. Và tất nhiên, cuối cùng, nó phân tích định dạng lưỡi thành php thô và cung cấp đầu ra bằng html/css/js. –
Tôi vẫn không hiểu. – pvaitonis