Hướng dẫn twig render php - cành cây kết xuất php

Chương trình học


Tác giả: Dương Nguyễn Phú Cường

Ngày đăng: Hồi xưa đóHồi xưa đó


  • +---htdocs
    |   \---project-nentang                    <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
    |       \---vendor
    |           +---composer
    |           +---symfony
    |           +---twig
    |           +---twig
    |           \---autoload.php
    |       +---composer.json
    |       \---composer.lock
    
    1 là một Template Engine nổi tiếng của Symfony.
  • Cú pháp của 
    +---htdocs
    |   \---project-nentang                    <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
    |       \---vendor
    |           +---composer
    |           +---symfony
    |           +---twig
    |           +---twig
    |           \---autoload.php
    |       +---composer.json
    |       \---composer.lock
    
    1 khá dễ học. Về cơ bản chỉ có các thành phần sau:
    • Sử dụng 
      +---htdocs
      |   \---project-nentang                    <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
      |       \---vendor
      |           +---composer
      |           +---symfony
      |           +---twig
      |           +---twig
      |           \---autoload.php
      |       +---composer.json
      |       \---composer.lock
      
      3 để render giá trị thay thế cho dòng lệnh thường thấy của php thuần 
      +---htdocs
      |   \---project-nentang                    <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
      |       \---vendor
      |           +---composer
      |           +---symfony
      |           +---twig
      |           +---twig
      |           \---autoload.php
      |       +---composer.json
      |       \---composer.lock
      
      4
    • Sử dụng 
      +---htdocs
      |   \---project-nentang                    <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
      |       \---vendor
      |           +---composer
      |           +---symfony
      |           +---twig
      |           +---twig
      |           \---autoload.php
      |       +---composer.json
      |       \---composer.lock
      
      5 cho các xử lý dạng logic 
      +---htdocs
      |   \---project-nentang                    <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
      |       \---vendor
      |           +---composer
      |           +---symfony
      |           +---twig
      |           +---twig
      |           \---autoload.php
      |       +---composer.json
      |       \---composer.lock
      
      6
    • Sử dụng 
      +---htdocs
      |   \---project-nentang                    <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
      |       \---vendor
      |           +---composer
      |           +---symfony
      |           +---twig
      |           +---twig
      |           \---autoload.php
      |       +---composer.json
      |       \---composer.lock
      
      7 cho các ghi chú (comments)
    • ...
  • Tài liệu tham khảo:
    • Cú pháp sử dụng Twig version 2x: https://twig.symfony.com/doc/2.x/templates.html

1.Cài đặt TWIG

Step 1: Cài đặt thư viện +---htdocs | \---project-nentang <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn... | \---vendor | +---composer | +---symfony | +---twig | +---twig | \---autoload.php | +---composer.json | \---composer.lock 8 thông qua +---htdocs | \---project-nentang <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn... | \---vendor | +---composer | +---symfony | +---twig | +---twig | \---autoload.php | +---composer.json | \---composer.lock 9:

  • Chạy câu lệnh sau:
php composer.phar require twig/twig
  • Cấu trúc thư mục sau khi cài đặt:
+---htdocs
|   \---project-nentang                    <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
|       \---vendor
|           +---composer
|           +---symfony
|           +---twig
|           +---twig
|           \---autoload.php
|       +---composer.json
|       \---composer.lock

Step 2: Cài đặt thư viện php composer.phar require symfony/var-dumper0 thông qua +---htdocs | \---project-nentang <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn... | \---vendor | +---composer | +---symfony | +---twig | +---twig | \---autoload.php | +---composer.json | \---composer.lock 9:

  • Chạy câu lệnh sau:
php composer.phar require symfony/var-dumper


Trước đây khi các PHP framework chưa phát triển mạnh mẽ như bây giờ thì các template engine là một phần không thể thiếu khi phát triển một website. Nổi tiếng thời đó có lẽ là Smarty, tới thời điểm hiện tại thì Smarty cũng đang được duy trì và phát triển. Bài viết này tôi không hướng dẫn các bạn sử dụng Smarty mà thay vào đó là Twig. Twig cũng là một template engine dành cho PHP đang được sử dụng rất phổ biến hiện nay bởi tính năng mà nó cung cấp đáp ứng được nhu cầu lập trình ứng dụng web. Ngoài ra, Twig còn được phát triển bởi Symfony, một trong những nhà phát triển hàng đầu trên thế giới.

Để sử dụng Twig, các bạn cài đặt với dòng lệnh Composer sau:

Code:

composer require "twig/twig:^2.0"

Phiên bản Twig hiện tại là bản 2.0 yêu cầu PHP 7.0 trở lên nên các bạn cần lưu ý điều này.

Các bạn tham khảo cách sử dụng Twig như ví dụ sau:

PHP:

<?php
//Require tập tin autoload.php
require 'path/to/autoload.php';

//Khai báo sử dụng thư viện
use Twig\Environment;
use Twig\Loader\ArrayLoader;

//Khởi tạo đối tượng loader
$loader = new ArrayLoader([
    'welcome' => 'Welcome to {{ site }}'
]);

//Khởi tạo đối tượng twig environment
$twig = new Environment($loader);

//Render
echo $twig->render('welcome', ['site' => 'Gextend']);

Các bạn có thể tìm hiểu thêm về template engine Twig tại địa chỉ https://twig.symfony.com/doc/2.x.

Thật sự là lần này khá cạn chủ đề, mãi mới nghĩ ra cái này để viết, hy vọng nó sẽ giúp ích được cho những bạn làm việc với framework khá ít sao của PHP ... đó chính là FuelPHP

FuelPHP là một framework đơn giản, tinh tế (theo lời của các bác viết ra nó nói thế) và bằng sự kết hợp với Twig ( một engine tempalte giống như blade trong laravel) sẽ giúp đỡ bạn khá nhiều trong việc lập trình trên framework này. Nó giúp bạn nhúng mã PHP vào trong view, hay giúp tạo ra các layout master để những view khác kế thừa chúng. Đó, chỉ đơn giản vậy thôi =)))

I. Chuẩn bị

  • Clone một project Fuel về để test nhể : Hướng dẫn đây
  • Với Fuel có nhiều engine có thể được sử dụng, hôm nay chúng ta đề cập tới Twig: Xem qua tý nhể. Bạn chỉ cần thêm vào phần
    php composer.phar require symfony/var-dumper
    2 trong file
    php composer.phar require symfony/var-dumper
    3 rồi sau đó chạy
    php composer.phar require symfony/var-dumper
    4 để load được nó về project.
  • Tạo ra một controller để test nhể (controler mình tạo ra được extends từ Controller)

II. Ví dụ

OK, sau khi composer install hãy vào vendor, và twig của bạn nằm trong đó đấy. Các bạn cũng nên tìm hiểu về nó trên trang chủ Sau đây mình tạo ra một layout và một view được kế thừa từ nó (1) ở đây mình kéo những file khác từ bên ngoài vào file layout thông qua hàm include, chúng ta viết mã nhúng của nó trong cặp ngoặc

php composer.phar require symfony/var-dumper
5 (2) Trang
php composer.phar require symfony/var-dumper
6 chúng ta extends từ trang
php composer.phar require symfony/var-dumper
7 và những thành phần được định nghĩa trong block sẽ tìm đến
php composer.phar require symfony/var-dumper
7 để render vào trong đó.
Hướng dẫn twig render php - cành cây kết xuất php
Sau đây mình tạo ra một layout và một view được kế thừa từ nó
Hướng dẫn twig render php - cành cây kết xuất php
(1) ở đây mình kéo những file khác từ bên ngoài vào file layout thông qua hàm include, chúng ta viết mã nhúng của nó trong cặp ngoặc
php composer.phar require symfony/var-dumper
5 (2) Trang
php composer.phar require symfony/var-dumper
6 chúng ta extends từ trang
php composer.phar require symfony/var-dumper
7 và những thành phần được định nghĩa trong block sẽ tìm đến
php composer.phar require symfony/var-dumper
7 để render vào trong đó.

Twig hỗ trọ chúng ta một vài hàm cơ bản, ở ví dụ trên chúng ta sử dụng hàm lang để lấy ra các text được định nghĩa trong file lang của dự án, hay như hàm asset_js sẽ lấy ra các file js từ public/assets/js/

Nhưng sẽ thế nào khi bạn muốn tự viết thêm các hàm để dễ sử dụng cho dự án của mình. Mình đơn cử, nhiều lúc trong view bạn muốn check xem có sự tồn tại của một biến nào hay không, trong trường hợp này bạn sẽ làm thế nào ??? OK, với mình thì mình sẽ viết thêm một class

php composer.phar require symfony/var-dumper
9 . Trong thư mục
composer require "twig/twig:^2.0"
0 bạn tạo ra file
composer require "twig/twig:^2.0"
1 và khai báo nó trong
composer require "twig/twig:^2.0"
2:

\Autoloader::add_classes(array(
    // Add classes you want to override here
    // Example: 'View' => APPPATH.'classes/view.php',
    'Twig_Fuel_Extension' => APPPATH . 'classes/twig/fuel/extension.php',
));

Hướng dẫn twig render php - cành cây kết xuất php
Tên hàm mà chúng ta có thể sử dụng trong
php composer.phar require symfony/var-dumper
6 sẽ là
composer require "twig/twig:^2.0"
4, nó sẽ sử dụng hàm
composer require "twig/twig:^2.0"
5 của PHP để check. Ví dụ như sau: Thêm một ví dụ nữa cho sinh động nhể =)))) Giả sử bạn muốn đang ở trang nào thì cái asidebar sẽ active tương ứng, lúc đó bạn cần check xem rồi đưa thuộc tính active vào trong thẻ
composer require "twig/twig:^2.0"
6, giờ làm thế nào nhỉ, bạn hãy viết một hàm helper (à đấy, bạn tạo ra một file
composer require "twig/twig:^2.0"
7 nhé, nhớ thêm nó trong
composer require "twig/twig:^2.0"
2 như sau
composer require "twig/twig:^2.0"
9) để check nhé. Nôm na là ta truyền cái URL vào, nếu khớp với URL trên thanh tabbar thì ta sẽ cho active cái thẻ
composer require "twig/twig:^2.0"
6 đó: OK, giờ nếu muốn sử dụng hàm isActive trong
php composer.phar require symfony/var-dumper
6 ta cần định nghĩa nó trong
composer require "twig/twig:^2.0"
1 như sau:
Hướng dẫn twig render php - cành cây kết xuất php
Thêm một ví dụ nữa cho sinh động nhể =))))
Hướng dẫn twig render php - cành cây kết xuất php
Giả sử bạn muốn đang ở trang nào thì cái asidebar sẽ active tương ứng, lúc đó bạn cần check xem rồi đưa thuộc tính active vào trong thẻ
composer require "twig/twig:^2.0"
6, giờ làm thế nào nhỉ, bạn hãy viết một hàm helper (à đấy, bạn tạo ra một file
composer require "twig/twig:^2.0"
7 nhé, nhớ thêm nó trong
composer require "twig/twig:^2.0"
2 như sau
composer require "twig/twig:^2.0"
9) để check nhé. Nôm na là ta truyền cái URL vào, nếu khớp với URL trên thanh tabbar thì ta sẽ cho active cái thẻ
composer require "twig/twig:^2.0"
6 đó:
Hướng dẫn twig render php - cành cây kết xuất php
OK, giờ nếu muốn sử dụng hàm isActive trong
php composer.phar require symfony/var-dumper
6 ta cần định nghĩa nó trong
composer require "twig/twig:^2.0"
1 như sau:

...
new Twig_SimpleFunction('is_active', function ($router) {
    return isActive($router);
}),
...

Đến lúc sử dụng rồi, trong file

php composer.phar require symfony/var-dumper
6 ta sử dụng như sau:

...
<li class="{{ is_active('/Admin/pages/forms/general.html') }}">
    <a href="#"><i
        class="fa fa-circle-o"></i></a>
</li>
...

Ở đây ta truyền vào URL và thấy rằng thẻ

composer require "twig/twig:^2.0"
6 đã được active

III. Sử dụng một số thành phần của Form

1. Form open, close

{{ form_open({'action' : ' ',  method' : ' ' }) }}

{{ form_close() }}

2. Select

Nếu giờ bên controller mình trả về một mảng $data:

<?php

class Controller_Testcontroller extends Controller
{
    public function get_index()
    {
        $data = [1,2,3,4,5,6,7];

        return View::forge('index.twig', $data);
    }
}

Thì bên view mình sử dụng dữ liệu data đó bên

php composer.phar require symfony/var-dumper
6 như sau:

+---htdocs
|   \---project-nentang                    <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
|       \---vendor
|           +---composer
|           +---symfony
|           +---twig
|           +---twig
|           \---autoload.php
|       +---composer.json
|       \---composer.lock
0

Còn một số những thành phần khác, mọi người hãy tìm hiểu tiếp nhé, cảm ơn mọi người