Trong Laravel, Blade là một hệ thống template engine mạnh mẽ và dễ sử dụng. Blade giúp việc tạo giao diện (views) trở nên linh hoạt và dễ dàng quản lý. Blade cung cấp các cú pháp ngắn gọn, hỗ trợ việc tái sử dụng mã nguồn và chia sẻ các phần tử chung giữa các view. Dưới đây là các khái niệm chính liên quan đến Blade views trong Laravel:
Blade là hệ thống template engine đi kèm với Laravel, cho phép bạn tạo ra các view (giao diện) một cách dễ dàng. Các file Blade có đuôi mở rộng là .blade.php
. Blade giúp bạn tách biệt logic PHP và giao diện HTML trong quá trình phát triển.
Trong Laravel, Master View là một template cơ bản mà các view con có thể kế thừa và mở rộng. Master view thường chứa các phần tử giao diện chung như header, footer, sidebar, hay các tài nguyên chung như CSS và JavaScript.
Thay vì viết lại mã nguồn cho các phần chung ở mỗi view, bạn có thể đặt chúng vào một master view và chỉ cần thay thế các phần cụ thể trong các view con bằng cách sử dụng yield.
Lưu ý quan trọng
resources/views/master/main.blade.php
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title Page</title>
<!-- Bootstrap CSS -->
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-inverse">
<div class="container">
<a class="navbar-brand" href="#">Title</a>
<ul class="nav navbar-nav">
<li class="active">
<a href="#">Home</a>
</li>
<li>
<a href="#">Link</a>
</li>
</ul>
</div>
</nav>
<!-- Nội dung chính sẽ được chèn vào đây -->
@yield('body')
<footer class="bg-primary">
<div class="container">
<div class="row">
<div class="col-md-6">
<h2>Footer title</h2>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid ad magni, ipsam sint quasi enim eius necessitatibus sapiente, quos laborum ipsum, non praesentium corrupti. Culpa aliquid dignissimos sequi temporibus architecto.
</p>
</div>
<div class="col-md-6">
<h2>Footer title</h2>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid ad magni, ipsam sint quasi enim eius necessitatibus sapiente, quos laborum ipsum, non praesentium corrupti. Culpa aliquid dignissimos sequi temporibus architecto.
</p>
</div>
</div>
</div>
</footer>
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<!-- Bootstrap JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</body>
</html>
Trong master view, bạn sử dụng cú pháp @yield
để chỉ định nơi mà các view con sẽ thay thế nội dung. Ví dụ: @yield('body')
là một placeholder, nơi nội dung từ các view con sẽ được chèn vào.
Master View: Là một template cơ bản mà các view con kế thừa. Nó chứa các phần tử giao diện chung và các @yield
placeholders. Mỗi view con chỉ cần xác định những phần cần thay thế và kế thừa layout này.
View Con: Là các view kế thừa từ Master View, và chúng sẽ xác định các nội dung cụ thể cho các phần tử @yield
trong Master View.
@yield: Là chỉ thị dùng trong Master View để khai báo một vùng mà các view con sẽ thay thế. Nó giống như một placeholder.
@section: Là chỉ thị trong các view con để định nghĩa các phần nội dung sẽ được chèn vào các @yield
tương ứng trong Master View.
routes/web.php
khai báo các router như sau<?php
use App\Http\Controllers\HomeController;
use Illuminate\Support\Facades\Route;
Route::get('', [HomeController::class, 'home']);
Route::get('gioi-thieu', [HomeController::class, 'about']);
app/Http/Controller/HomeController.php
<?php
namespace App\Http\Controllers; // khai báo không gian chứa file
class HomeController extends Controller {
// phương thức trong một class
public function home() {
$name = 'PHP LẢAVEL';
return view('home', compact('name'));
}
// phương thức trong một class
public function about() {
return view('about');
}
}
resources/views/
resources/views/home.blade.php
@extends('master.main') <!-- Kế thừa master layout -->
@section('body') <!-- Định nghĩa nội dung sẽ thay thế phần @yield('body') trong master layout -->
<h1 class="text-center">Hello {{$name}}</h1>
@stop()
resources/views/about.blade.php
@extends('master.main') <!-- Kế thừa master layout -->
@section('body') <!-- Định nghĩa nội dung sẽ thay thế phần @yield('body') trong master layout -->
<h1 class="text-center">Hello about</h1>
@stop()
Mowrr cmd tại thư mục dự án và chạy
php artisan serve
INFO Server running on [http://127.0.0.1:8000].
Press Ctrl+C to stop the server
Truy cập các link sau để xem kết quả
Kiểm tra màn hình đã hiển thị đúng giao diện chưa