Php://temp

Php://temp

Công cụ mẫu  Là Gì ?

Hiểu theo một cách khá đơn giản, Template Engine giúp bạn phân biệt Code PHP và Html ra làm 2 phần có thể hiểu là PHP đóng vai trò là Controler (C) và Template là View (V) trong MVC đầy đủ mô hình. Một cách code khá quen thuộc trong hầu hết các nguồn mỡ hiện có như Laravel. Help Code của bạn nhìn gọn gàng và chuyên nghiệp hơn, dễ bảo trì và sửa lỗi hơn

Nếu bạn có ý định sử dụng mô hình MVC cho một dự án PHP thì Công cụ mẫu chắc chắn rằng bạn sẽ cần đến. Hiện nay có rất nhiều Template Engine khá nổi tiếng như Smarty, Twig với hiệu suất tốt, bảo mật cao. Nhưng trong bài viết này, ECShop Lab muốn chia sẻ với bạn một Class Template Engine kiểu nhà trồng đơn giản và hiệu quả

Tạo Template Engine bằng PHP

Full code Class Template as after. cách các bạn đọc comment trong code để hiểu về các hàm nhé

mẫu lớp {

    static $blocks = array();
    static $cache_path = 'cache/';
    static $cache_enabled = FALSE;

/* Khai báo thư mục lưu cache */

static function Init($cache_path = 'cache/', cache_enabled= false) {
       $this->cache_path = $cache_path;
      $
    }

/* Render Template to display */

chế độ xem hàm tĩnh($file, $data = array()) {
        $cached_file = self. cache($file);
        extract($data, EXTR_SKIP);
           yêu cầu $cached_file;
    }

/* Tạo bộ nhớ đệm lưu lại kết quả  mã đã biên dịch thành PHP */

bộ đệm hàm tĩnh($file) {
        if (. file_exists(tự. $cache_path)) {
             mkdir(self. $cache_path, 0744);
          }
          $cached_file = self. $cache_path. str_replace(mảng('/', '. html'), mảng('_', ''), $file. '. php');
        if (. bản thân. $cache_enabled. . file_exists($cached_file). filemtime($cached_file) < filemtime($file)) {
          $code = self. includeFiles($file);
         $code = self. compileCode($code);
          file_put_contents($cached_file, ''. PHP_EOL. $code);
          }
        return $cached_file;
    }

/* Xóa bộ nhớ đệm */

static function clearCache() {
        foreach(glob(self. $cache_path. '*') dưới dạng $file) {
          unlink($file);
        }
    }

/*  Biên dịch các thành phần trong Mẫu thành PHP */

static function compileCode($code) {
        $code = self. compileBlock($code);
       $code = self. compileYield($code);
       $code = self. compileEscapedEchos($code);
       $code = self. compileEchos($code);
       $code = self. compilePHP($code);
        return $code;
    }

/* biên dịch Bao gồm  Thẻ */

static function includeFiles($file) {
       $code = file_get_contents($file);
        preg_match_all('/{% ?(extends. bao gồm) ?\'?(. *?)\'? . includeFiles($value[2]), $code);
        foreach ($matches as $value) {
            $code = str_replace($value[0], self::includeFiles($value[2]), $code);
        }
        $code = preg_replace('/{% ?(extends. bao gồm) ?\'?(. *?)\'?
        return $code;
    }

/* biên dịch Cú pháp PHP */

static function compilePHP($code) {
        return preg_replace('~\{%\s*(. +?)\s*\%}~is', '', $code);
    }

/* biên dịch PHP Echo */

static function compileEchos($code) {
        return preg_replace('~\{{\s*(. +?)\s*\}}~is', '', $code);
    }

    hàm tĩnh compileEscapedEchos($code) {
        return preg_replace('~\{{{\s*(. +?)\s*\}}}~is', '', $code);
    }

    hàm tĩnh compileBlock($code) {
        preg_match_all('/{% ?block ?(. *?) ?%}(. *?){% ?endblock ?%}/is', $code, $matches, PREG_SET_ORDER);
        foreach ($matches as $value) {
. mảng_key_exists($value[1], tự. $blocks)) bản thân. $blocks[$value[1]] = '';
          if (strpos($value[2], '@parent') === false) {
                self::$blocks[$value[1]] = $value[2];
          } other {
                self. $blocks[$value[1]] = str_replace('@parent', self. $blocks[$value[1]], $value[2]);
              }
           $code = str_replace($value[0], '',
        }
        return $code;
    }

/* biên dịch kế thừa như trong Blade of Laravel */

 hàm tĩnh compileYield($code) {
        foreach(self. $blocks dưới dạng $block => $value) {
         $code = preg_replace('/{% ?yield ?'. khối $. ' ?%}/', $value, $code);
        }
        $code = preg_replace('/{% ?yield ?(. *?) ?%}/i', '', $code);
      return $code;
    }

}
?>

 

Cách Sử Dụng PHP Template Engine Class

Để giúp bạn hiểu rõ hơn về Template Engine chúng ta bắt đầu với một Dự án Say Hello World huyền thoại như sau

Bước 1. Tạo một dự án với thư mục có tên mẫu chứa các tệp với cấu trúc như sau

| -- cache
. -- lượt xem.
. -- mục lục. html 
. -- cách trình bày. html
. -- tiêu đề. html
. -- chân trang. html
. -- Mẫu. php
. -- mục lục. php

Bước 2. Mã cho từng tệp đã tạo

- You created a File index. php (được hiểu là Lớp Controller - C) as structure on with content as after

bao gồm 'Mẫu. php';

/* Bạn có thể đổi tên thư mục khác, và cấu hình có bật Bộ nhớ đệm hay không */

Mẫu. Ban đầu ('bộ đệm/', sai);

/* Hiển thị nội dung ra trang chủ được lấy từ file index.html  là Template trong thư mục views */
Template::view('views/index.html', [
    'name' => 'Home Page',
    'colors' => ['red','blue','green']
]);


?>

- Tạo bố cục tệp. html trong thư mục lượt xem (toàn bộ tập tin trong lượt xem được xem là lớp xem - V ) với nội dung như sau

 

Tệp này đóng vai trò làm chủ, kiểu là tất cả các trang khác sau này sẽ cùng một bố cục html cục bộ của bố cục. html này. Hay also call is next template

 

- Tạo tiếp mẫu cho trang chủ có tên chỉ mục. html đặt vào chế độ xem thư mục

{% extends layout.html %}
{% block title %} Home Page  {% endblock %}
{% include header.html %}
{% block content %}
8

9

{% extends layout.html %}
{% block title %} Home Page  {% endblock %}
{% include header.html %}
{% block content %}
0
{% include footer.html %}

Giải thích cú pháp trong Template Engine

+ {%  mã %}. ký tự % báo hiệu cho Class Template Mô tả này cần phải biên dịch từ dấu trích dẫn mở, đến dấu trích dẫn đóng, bạn thấy quá quen khi sử dụng Laravel. Phần mã ở giữa sẽ được biên dịch thông qua mã PHP

0

1

2

3

4

Khai báo biến trong Template Engine

Biến trong Mẫu này được sử dụng thông qua mảng, được truyền vào tham số thứ 2 trong chế độ xem hàm ở chỉ mục. php

Có thể sửa đoạn mã ở chỉ mục. php to a way easy better

...

$data =[

'name' => 'Home Page',
    'colors' => ['red','blue','green']
]);

5

 

Ở chỉ mục mẫu. html ta sử dụng biến đã khai báo như sau

6

2

/* kết quả hiển thị thành html */

Chào mừng bạn đến với Trang chủ, danh sách các màu.

7 đỏ
7 xanh dương
7 green

 

Qua đây có thể hiểu được 

{% extends layout.html %}
{% block title %} Home Page  {% endblock %}
{% include header.html %}
{% block content %}
0

Xóa mẫu bộ đệm

Bộ nhớ cache trong trường hợp này không phải là bộ đệm html tĩnh nhưng trong các Framework chuyên nghiệp mà thực ra là Mã tuân thủ PHP, tức là phần mã được biên dịch từ mẫu thành PHP sau đó lưu thành tệp để không phải biên dịch nhiều lần

Trong thực tế, ta cache là kết quả hiển thị ra màn hình được lưu lại dưới định dạng tệp tạm thời

To delete cache ta only must call function

7

Kết luận

Công cụ mẫu rất hữu ích khi bạn làm các dự án lớn hơn, nhiều người cùng làm với ưu điểm là làm cho dự án của bạn sạch sẽ và có vẻ chuyên nghiệp hơn. Nếu bạn thấy các Framework phức tạp khó sử dụng thì với bài viết này bạn có thể phát triển cho mình một mô hình MVC của riêng mình với cách code của riêng mình, tùy biến linh hoạt tùy thích