Bài 11: Blade template engine trong Laravel - Học lập trình Laravel

Đăng bởi: Admin | Lượt xem: 2315 | Chuyên mục: Laravel


1. Giới thiệu

Template engine là gì?
Template là 1 bố cục chung cho tất cả các trang có sử dụng lại những thành phần giống nhau mà không phải viết lại toàn bộ, từ đó trên mỗi trang, chỉ cần thay đổi ở một số nơi được chỉ định trên trang từ template 
Template engine có tác dụng giúp sạch đi những đoạn code PHP nằm trong View nên tách biệt hoàn toàn giữa người cắt CSS và người code PHP
Hiện nay có khá nhiều template engine như Smarty, XiTemplate, TinyButStrong, Blade...
Blade template
Blade rất đơn giản, nhưng lại là một templating engine đầy mạnh mẽ. Không giống những PHP templating engine phổ biến khác, Blade không giới hạn chúng ta sử dụng code PHP trong views. Tất cả các file Blade sẽ được dịch thành file code PHP và cache cho đến khi file Blade bị thay đổi, điều đó cũng có nghĩa là Blade tự làm tất cả những việc cần thiết để có thể chạy views cho ứng dụng của bạn
Các file view dùng cho Blade có phần tên đuôi file là .blade.php và được lưu trong thư mục mặc định resource/views (với Laravel 5.x) và app/views (Laravel 4.x)

2. Sử dụng Blade Template Engine

Khởi tạo
  1. Tên file luôn phải đặt dưới dạng xxx.blade.php
  2. Nếu muốn thay đổi đường dẫn thư mục view của laravel 5 bạn chỉ cần sửa đường dẫn tại file config/view.php
'paths' => [
    realpath(base_path('resources/views')),
],
Tạo file template đơn giản
Tạo file resources/views/example.blade.php
<!-- resources/views/example.blade.php -->
<div class="article">
  <p><?php echo 'hello world' ?></p>
</div>
Tạo môt route để test
Route::get('/example', function ()    {
    return view('example');
});
Như vậy là ta đã tạo được file blade. Giờ ta  vào app và kiểm tra trong đường dẫn http:/localhost:8000/example
Truyền biến từ route, controller xuống view
Ta sửa một chút trong trong route và view như sau:
Route::get('/example', function ()    {
    return view('example', ['name' => 'test']);
});
<!-- resources/views/example.blade.php -->
<div class="article">
  <p><?php echo $name; ?></p>
</div>
Như vậy là ta đã có thể dễ dàng truyền giữ liệu từ controller xuống view một cách dễ dàng.

3. Các cú pháp trong Blade Template Engine

Để hiển thị giữ liệu trên view ta dùng dấu {{ $x }}
{{ $name }}
Khi đó file blade sẽ tự build ra temple dạng theo dạng
<?php echo $name?>
  1. Hiển thị giữ liệu tồn tại {{ isset($name) ? $name : 'Hello world!' }}
  2. Cú pháp rút gọn : {{ $name or 'Default' }}
Chú ý: Blate không chấp nhận các lệnh comment thông thường của php như:
// {{ $nam }}
Khi này mặc dù dòng code đã được comment nhưng khi được build ra view thì giữ liệu vẫn được sử lý và hiển thị bình thường.
Cấu trúc điều khiển
Lệnh if
@if (true)
    {{ 'is true!' }}
@else
    {{ 'is false!' }}
@endif
Có thể thấy code đã đơn giản hơn rất nhiều so với việc ta sử dụng lệnh if với cú pháp php thông thường
Vòng lặp
@for ($i = 0; $i < 10; $i++)
    Giá trị hiện tại là {{ $i }}
@endfor

@foreach ($users as $user)
    <p>Đây là user có mã {{ $user->id }}</p>
@endforeach

@while (true)
    <p>Tôi đang lặp mãi mãi :(</p>
@endwhile

4. Kế thừa

  1. Đây là phần quan trọng nhất và cũng là mục tiêu của việc tạo ra các templete trong một ngôn ngữ lập trình
  2. Một templete tốt không chỉ dễ sử dụng mà còn phải có tác dụng kế thừa để có thể sử dụng lại, tránh tối đa việc lặp code
  3. Không thể nào tạo ra một file templete mà lại chỉ dùng cho một chức năng nhất định. ta phải làm cho chúng có thể sử dụng lại ở các màn hình khác có cùng chức năng.
  4. Cú pháp : @include('_example', ['name1' = $name])
<!-- resources/views/_example.blade.php -->
<p><?php echo $name1; ?></p>
Giờ ta include file _examplte vào màn hình example
<!-- resources/views/example.blade.php -->
<div class="article">
  @include('_example', ['name1' = $name])
</div>
Kết quả thu được cũng tương hệt như kết quả lúc đầu. tuy nhiên từ nay ta có thể sử include templete _example.blade.php vào bất kỳ đoạn nào cần sử dụng đến hiển thị $name

5. Layout

  1. Thiết kế layout cũng là một thành phần vô cùng quan trọng để có thể tận dụng tối đa sức mạnh của blade
  2. Một trang web bất kỳ thường có một số thành phần không đổi như header, footer, title... Chính vì thế nếu mỗi lần tạo ra một view ta lại copy lại nhưng thành phần như vậy thì sẽ gây lặp code và việc maintain cũng mất thời gian hơn do phải làm đi làm lại một việc trên nhiều màn hình. Việc này có thể gậy thiếu xót.
Ví dụ:
<!-- Stored in resources/views/layouts/master.blade.php -->

<html>
    <head>
        <title>App Name - @yield('title')</title>
    </head>
    <body>
        @section('sidebar')
            This is the master sidebar.
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>
<!-- Stored in resources/views/child.blade.php -->
@extends('layouts.master')

@section('title', 'Page Title')

@section('sidebar')
    <p>This is appended to the master sidebar.</p>
@endsection

@section('content')
    <p>This is my body content.</p>
@endsection
Trên đây là một ví dụ về việc tạo ra một layout cho một ứng dụng. 
Mỗi session sẽ là một khu vực hiển thị giữ liệu trong ứng dụng. Ta chỉ cần viết một lần và nó sẽ được gọi ra ở bất kỳ một màn hình con nào được extend
Một session được bắt đầu bởi @session('name') và kết thúc bởi @endsession
Để include một layout ta sử dụng @exends('name_layout')
Bài tiếp theo: Truyền tham số từ Controller sang View >>
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!