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 TWIGStep 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: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: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à FuelPHPFuelPHP 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 đó. 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 đó.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',
));
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: 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:...
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{{ form_open({'action' : ' ', method' : ' ' }) }}
{{ form_close() }}
2. SelectNế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
0Cò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 |