Mọi người cho em hỏi sự khác nhau giữa @include và @extend trong laravel 5.2 là gì với ạ.
Blade Template in Laravel 5.x
extend dùng khi bạn áp dụng layout.
còn include dùng khi bạn muốn đưa đoạn mã khác vào trang đó
Tên nói lên tất cả, extends là mở rộng, include là bao gồm, với extend thì child sẽ tương tự parent từ đầu đến đít có 1 số thay đổi cho phù hợp, còn includes là theo kiểu sử dụng, includes chỉ là 1 phần của trang chứa, có thể dùng ở bất cứ đoạn nào của trang chứa
Khác nhau là:
- @include: thì mình muốn mở rộng phần code nào thì mở rộng.
-
@extend: phần mở rộng được quy định.
Ví dụ: - File A @include B: thì ngoài code ở B ra, mình thích thêm gì vào A cũng được.
- File A @extend B: A và B giống nhau, phần mở rộng thêm của A sẽ được quy định bởi @yield(‘extend’) ở trong B
Với các file kết cấu kiểu nhiều component, thì nên dùng include. Ví dụ file layout.blade.php, sẽ gồm các component là header.blade.php, footer.blade.php, … thì nên dùng @include để include code của các file này vào file layout.blade.php.
Với các file cần sự kế thừa, các component giống hệt nhau thì mình dùng @extend. Ví dụ file about.blade.php, các component nó giống với layout.blade.php, chỉ mong muốn mở rộng phần content. Thì ở file layout.blade.php quy định 1 @yield(‘content’). Và ở file about.blade.php, extend(‘layout’), thêm phần khác biệt ở @section(‘content’)
Theo mình nên dùng @section('content') ... @show
thay cho @yield('content')
. Vi yield xử dụng ở những đoạn ngắn thì hơn, ví dụ @yield('title')
Bạn không khai báo yield thì sao dùng được section
Khai báo cú pháp:
@section()
Cái này mới thì phải, Dùng thay thế @yield() khi sau này chúng ta muốn chèn cả đoạn dài. VD: div Content. Cú pháp này có thể ghi nối, còn @yield() là ghi đè luôn.
@show
thay cú pháp:
@yield()
Còn cú pháp chèn nội dung là:
@section()
…
@endsection