3. Rendering views for collections (ok)
https://viblo.asia/p/tap-13-blade-template-laravel-1VgZv1dRKAw
Nếu bạn có một mảng dữ liệu và muốn truyền từng dữ liệu vào một view nào đó thì bạn có thể sử dụng @each thay vì @foreach và @include.
Chẳng hạn mình có cấu trúc thư mục như sau:
resources/
├── views/
| ├── includes/
| | | item.blade.php
| | list.blade.phpĐầu tiên mình sẽ thử sử dụng cách thông thường đó là dùng @foreach và @include. Tại blade view list.blade.php mình sẽ code nội dung như sau:
@php
$list = ['Item #1', 'Item #2', 'Item #3'];
@endphp
<ul>
@foreach ($list as $item)
@include('includes.item')
@endforeach
</ul>Và blade view includes.item:
<li>{{ $item }}</li>Sau đó chúng ta đăng ký route và chạy thử:
Route::get('/', function () {
return view('list');
});Bây giờ chúng ta sẽ dùng @each để thay thế cách trên. Ta chỉ cần thay đổi đoạn vòng lặp trong blade view list.
<ul>
@each('includes.item', $list, 'item')
</ul>@each này sẽ nhận:
Tham số đầu tiên là tên view include
Tham số thứ hai là biến chứa mảng dữ liệu
Tham số thứ ba là tên biến nhận giá trị trong view include.
Ngoài ra trong trường hợp nếu mảng dữ liệu rỗng thì ta có thể include view hiện thông báo gì đó bằng cách khai báo thêm tham số thứ tư ở @each với giá trị là tên view chứa nội dung thông báo.
@each('view.name', $list, 'item', 'view.empty')Lưu ý: Các view được render thông qua
@eachkhông thể nhận các biến dữ liệu được truyền đến parent view. Nên bạn cần cần nhắc sử dụng@foreachvà@includeđể thay thế nếu các view include cần những biến dữ liệu này.
Last updated
Was this helpful?