Директива include
Директива include в Blade позволяет вставлять содержимое одного шаблона в другой. Это удобно для переиспользования общих элементов интерфейса: шапок, подвалов, меню, форм и других компонентов. Первым параметром передаётся путь к шаблону относительно папки resources/views без расширения .blade.php. Вторым параметром можно передать массив данных, которые будут доступны внутри подключаемого шаблона.
Важно понимать, что директива include копирует содержимое подключаемого шаблона в текущий во время рендеринга. Это означает, что все переменные, доступные в родительском шаблоне, автоматически доступны в дочернем. Однако для большей явности рекомендуется передавать нужные данные через второй параметр.
Синтаксис
@include('path.to.template')
@include('path.to.template', ['var' => 'value'])
Пример
Создадим файл шапки сайта в resources/views/partials/header.blade.php:
<header>
<h1>My Website</h1>
<nav>
<a href="/">Home</a>
<a href="/about">About</a>
<a href="/contact">Contact</a>
</nav>
</header>
Подключим шапку в основном шаблоне resources/views/index.blade.php:
<!DOCTYPE html>
<html>
<head>
<title>Main Page</title>
</head>
<body>
@include('partials.header')
<main>
<p>Welcome to my website!</p>
</main>
</body>
</html>
Результат рендеринга:
<!DOCTYPE html>
<html>
<head>
<title>Main Page</title>
</head>
<body>
<header>
<h1>My Website</h1>
<nav>
<a href="/">Home</a>
<a href="/about">About</a>
<a href="/contact">Contact</a>
</nav>
</header>
<main>
<p>Welcome to my website!</p>
</main>
</body>
</html>
Пример
Передадим данные в подключаемый шаблон. Создадим шаблон карточки товара в resources/views/partials/product.blade.php:
<div class="product">
<h2>{{ $name }}</h2>
<p>Price: ${{ $price }}</p>
<p>Description: {{ $description }}</p>
</div>
Подключим карточку товара в основном шаблоне и передадим необходимые данные:
<!DOCTYPE html>
<html>
<head>
<title>Products</title>
</head>
<body>
@include('partials.product', [
'name' => 'Laptop',
'price' => 1200,
'description' => 'Powerful laptop with 16GB RAM'
])
</body>
</html>
Результат рендеринга:
<!DOCTYPE html>
<html>
<head>
<title>Products</title>
</head>
<body>
<div class="product">
<h2>Laptop</h2>
<p>Price: $1200</p>
<p>Description: Powerful laptop with 16GB RAM</p>
</div>
</body>
</html>
Пример
Используем динамические данные из контроллера. Создадим контроллер в app/Http/Controllers/ProductController.php:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProductController extends Controller
{
public function index()
{
$products = [
['name' => 'Laptop', 'price' => 1200, 'description' => '16GB RAM'],
['name' => 'Phone', 'price' => 800, 'description' => '128GB storage'],
['name' => 'Tablet', 'price' => 400, 'description' => '10 inch screen']
];
return view('products', ['products' => $products]);
}
}
?>
Создадим шаблон списка товаров в resources/views/products.blade.php:
<!DOCTYPE html>
<html>
<head>
<title>Product List</title>
</head>
<body>
@foreach ($products as $product)
@include('partials.product', $product)
@endforeach
</body>
</html>
Результат рендеринга:
<!DOCTYPE html>
<html>
<head>
<title>Product List</title>
</head>
<body>
<div class="product">
<h2>Laptop</h2>
<p>Price: $1200</p>
<p>Description: 16GB RAM</p>
</div>
<div class="product">
<h2>Phone</h2>
<p>Price: $800</p>
<p>Description: 128GB storage</p>
</div>
<div class="product">
<h2>Tablet</h2>
<p>Price: $400</p>
<p>Description: 10 inch screen</p>
</div>
</body>
</html>
Смотрите также
-
директива
includeIf,
которая подключает шаблон только если он существует -
директива
includeWhen,
которая подключает шаблон при выполнении условия -
директива
extends,
которая указывает на базовый шаблон для наследования -
директива
section,
которая определяет секцию контента в шаблоне