[精讚] [會員登入]
202

[PHP+ci4] codeignitor4+ smarty5

這篇整合 php 的framework codeignitor4 + smarty5。

分享此文連結 //n.sfs.tw/16401

分享連結 [PHP+ci4] codeignitor4+ smarty5@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2024-06-16 00:49:23 最後編修
2024-04-12 03:15:57 By 張○○
 

自動目錄

因為升級成 Codeignitor4(以下全稱為ci4) 加上習慣使用 smarty,因此在 view表上決定使用 smarty5(以下皆稱smarty)。

先決條件,你已經安裝完畢 ci4,我是使用git來安裝(可以參考這裡),當然你也可以使用composer來安裝,因為smarty5預計使用composer來安裝。

ci4 要整合和 smarty5 一起用,需要異動的檔案有一些多,你可以視需要調整。如果你只想用smarty4 的話,可以參考ci4+smarty4這篇

系統

Rocky Linux release 9.0 (Blue Onyx)

Docker  20.10.21

  └─ PHP 8.2.17

          └─ Codeignitor 4.5.0

 

安裝smarty5

第5版的smarty安裝,官網似乎停運了?採用 github 來安裝 [2]

(github上[1]說明用composer來裝,但在docker中這樣要重建container,我覺得很麻煩,所以採用git來安裝)

進到 ci4 的目錄 app/ThirdParty 中

$ cd path/to/app/ThirdParty

$ git clone https://github.com/smarty-php/smarty.git

在ThirdParty目錄下看到以下的檔案:

app/ThirdParty
└── smarty
    ├── changelog
    ├── CHANGELOG.md
    ├── composer.json
    ├── CONTRIBUTING.md
    ├── demo
    ├── docker-compose.yml
    ├── docs
    ├── LICENSE
    ├── Makefile
    ├── make-release.sh
    ├── mkdocs.yml
    ├── phpunit.xml
    ├── README.md
    ├── run-tests-for-all-php-versions.sh
    ├── run-tests.sh
    ├── SECURITY.md
    ├── src   <== 邏輯上只需要保留這個,其它可以刪掉
    ├── tests
    ├── TODO.txt
    └── utilities

上面的目錄只有src/的目錄有用,所以搬移 src/ 目錄並改名

$ mv smarty/src/  ./smarty5/
$ rm -rf smarty

到 app/Config 建立 Smarty5 的目錄
$ cd /path/to/app/Config/
$ mkdir Smarty5

建立這目錄是考慮過後最適合放 smarty的config檔的位置,這個目錄並非必要,如果你沒有smarty 的config的話。

完工後在ThirdParty目錄下看到以下的目錄:

app/ThirdParty
└── smarty5

 

 

設定SMARTY服務

這次要異動的檔案如下:

app
├── Config
│   ├── Smarty5  <== smarty的config檔放置位置
│   ├── Services.php  <== 註記服務
│   └── Autoload.php  <== 註記Smarty的命名空間
├── Libraries
│   └── Smarty5.php  <== 建立Smarty5 物件
├── ThirdParty
│   └── smarty5 <== 上面已將 smarty5 裝在這裡
│       └── Smarty.php <== 讀取此檔即可
└── Views
    └── <樣版放這裡>

並在在writable/目錄下建立兩個可寫入的目錄

ci4
└── writable
    ├── cache
    └── templates_c

 

修改Config

註記Smarty的命名空間 App/Config/Autoload.php

修改 $psr4

    public $psr4 = [
        APP_NAMESPACE => APPPATH,
        'Smarty' => APPPATH . 'ThirdParty/smarty5/',
    ];

新增第4行。

 

註記服務 App/Config/Services.php

<?php
namespace Config;

use CodeIgniter\Config\BaseService;
use \App\Libraries\Smarty5;

class Services extends BaseService
{
    public static function Smarty5($getShared = true){
      if($getShared) {
        return static::getSharedInstance('Smarty5');
      }
      return new Smarty5;
    }
   ...
}

新增 5,9-14行。

 

建立 Smarty5 服務

如果不想要每次設定參數來使用smarty的話,建立一個 library 類別是必要的,新增以下檔案:

App/Libraries/Smarty5.php

<?php

namespace App\Libraries;
use Smarty;

class Smarty5 extends Smarty\Smarty {

    public function __construct()
    {
        parent::__construct();
        parent::setTemplateDir(APPPATH . 'Views/');
        parent::setConfigDir(APPPATH . 'Config/Smarty5/');
        parent::setCompileDir(WRITEPATH . 'templates_c/')->setCacheDir(WRITEPATH . 'cache/');
        parent::setLeftDelimiter('{{');
        parent::setRightDelimiter('}}');
    }

    public function view($tpl_name) {
        parent::display($tpl_name);
    }
}

設定寫入暫存檔目錄及cache,同時設定smart標記左右符號。view函式是display的別名。

 

Controller 中叫用

service('Smarty5')->assign('ip','123.46.79.66')->assign('isipv6',  true);
service('Smarty5')->view('test_template.tpl');

test_template.tpl 是樣版檔,會到 App/Views/ 中尋找。

Smarty5 預設採用靜態方式載入,共用一個變數。

如果想用動態載入的話,可寫成:

$s = service('Smarty5',false);
$s->assign('ip', '1.2.3.4')->assign('isipv6',  true);
$s->view('test_template.tpl');

結論是透過網友的幫忙,smarty5+ci4 整合的不錯,也不難,祝大家使用愉快。

 

參考資料

[1] smarty5 的說明文件 https://smarty-php.github.io/smarty/stable/designers/language-basic-syntax/

[2] ci4官網說明 https://codeigniter.tw/user_guide/index.html

[3] smarty5 文件 https://smarty-php.github.io/smarty/5.x/

 

END

你可能感興趣的文章

[PHP] 位元運算 (Bitwise operation)及和PERL比較 PHP 的位元運算,及和PERL比較整理

[PHP] 解析二進位圖片 使用php來解析png圖片,把資料寫在16進位格式

[PHP] CodeIgniter 3+pure+smarty安裝及環境設置2/2 PHP framework CodeIgniter 3+ pure CSS +smarty Template Engine的整合#2

PHP判斷對方瀏覽器語系 多語系的網頁應該主動偵查瀏覽器的語系,配合使用者跳出合適的語系。

[PHP] 讀取作業系統程式執行結果 PHP讀取作業系統程式執行結果

[CodeIgniter 3] 取得controller和method的方法 CodeIgniter 3 取得controller和method的方法

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[jQuery] select 元件的取值及給值 html中的元件select,在jquery中要如何使用?

[Windows7] 移除IE10及移除IE11 Windows7 不得已的情況要移除IE11或IE10怎麼做?

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭

TFTP Server 安裝及使用 讓設備的網路設定檔或是韌體經由TFTP拷備出來,操作的方法

關閉瀏覽器表單的自動完成autocomplete 什麼是自動完成?就是當我們在網頁的輸入文字欄位中打入文字時,瀏覽器會把曾輸入過歷史記錄中找出來讓我們選擇。