# 1. Laravel cung cấp cho chúng ta thẻ @include, @includeIf, @includeWhen, @includeFirst (ok)



`@include` trong Blade template cho phép bạn có thể liên kết một blade view với một view khác. Tất cả các biến dữ liệu ở parent view đều được truyền đến view include.

Chẳng hạn mình có cấu trúc thư mục như sau:

```
resources/
├── views/
|   ├── includes/
|   |   |   room.blade.php
|   |   home.blade.php
```

Ở blade view `home` ta code:

```
@php
    $name = 'Lê Chí Huy';
@endphp

@include('includes.room')
```

Như các bạn thấy, mình đã sử dụng cú pháp `@include` với tham số là tên view liên kết cần đưa vào blade view `home` này. Ngoài ra mình có khai báo biến `$name` để thử xem là blade view `includes.room` có nhận được hay không.

Tại blade view `includes.room` mình code như sau:

```
{{ $name }}
```

Cuối cùng là đăng ký route để render blade view `home` ra:

```
Route::get('/', function () {
    return view('home');
});
```

![](https://images.viblo.asia/01eb781c-cf3a-4b04-bb81-efe40ce646a7.JPG)

Kết quả này chứng minh cho việc ta có thể lấy tất cả các dữ liệu tại view liên kết từ parent view. Ngoài ra bạn cũng có thể truyền một dữ liệu bất kì cho view liên kết thông qua tham số thứ hai của thẻ `@include`.

```
@include('view.name', ['some' => 'data'])
```

> Kết quả này chứng minh cho việc ta có thể lấy tất cả các dữ liệu tại view liên kết từ parent view.



Trong trường hợp nếu bạn `@include` một view không tồn tại thì framework sẽ báo lỗi. Chính vì vậy khi include một view không chắc chắn sẽ tồn tại thì ta sử dụng thẻ `@includeIf` thay cho `@include`.

```
@includeIf('view.name', ['some' => 'data'])
```

Bạn cũng có thể include một view khi kiểm tra một điều kiện nào đó trả về boolean `true`.

```
@includeWhen($boolean, 'view.name', ['some' => 'data'])
```

Laravel còn cung cấp thẻ `@includeFirst`, thẻ này cho phép ta include view đầu tiên trong mảng view khai báo. Nhiều bạn sẽ hiểu ngay công dụng của thẻ này nếu theo dõi các tập trước của mình.

```
@includeFirst(['custom.admin', 'admin'], ['some' => 'data'])
```

Như dòng code này, nếu view `custom.admin` tồn tại thì nó sẽ include view này và bỏ qua view `admin`. Còn nếu view `custom.admin` không tồn tại thì nó sẽ bỏ qua và tiếp tục kiểm tra view `admin`.

> **Lưu ý:** Bạn nên tránh sử dụng `__DIR__` và `__FILE__` trong blade view vì chúng chỉ trả kết quả đường dẫn của các file cache hay compile view, không cung cấp thông tin cần thiết.
