php – Codeigniter – 在任何地方都能使用 CI 開發

繼承前一篇 Codeigniter – 如何讓 System 交給 Composer 保管

最近因為要在 Codeigniter 以外使用 Codeigniter 的工具,花了一兩天思考,後來受到製作 Codeigniter Restful 的 Chris Kacerguis 啟發,想到原來可以這麼設計。

假設我們想把已經寫好的 Codeigniter 類別庫、或是想使用 Codeigniter 的工具,用在如應用在其他 CMS、其他框架、傳統 PHP 的話,那該如何橋接呢?很簡單,改改名稱就好。

 

修改路徑與檔名

  • application/ 替換成 ci_app/
  • index.php 替換成 bridge_codeigniter.php

bridge_codeigniter.php 本來是 Codeigniter 的 index.php,在這個範例中為了語意化,我們不使用 index.php 。

 

替換 Codeigniter application 位置

$application_folder = 'ci_app';

瀏覽器開啟 bridge_codeigniter.php 應該也能看到 Codeigniter 的歡迎畫面,不過我們其實不需要了。

 

刪除 Welcome 歡迎畫面

ci_app/controllers/Welcome.php

public function index()
{
    // $this->load->view('welcome_message');
}

 

建立測試文件

新增一個 helloworld.php

<?php

// 我們一定有其他下載的工具,記得載入 vendor
require_once 'vendor/autoload.php';

// 橋接 Codeigniter
require_once 'bridge_codeigniter.php';

/**
 * 透過 Codeigniter 的 get_instance() 就能順利取得整個 Codeigniter 實例囉
 * Codeigniter 相關配置,當然也是寫在 ci_app/ 裡面
 */
$ci = &get_instance();

/**
 * 示範使用 Codeigniter 的 Library
 */
$ci->load->library('encryption');

// 產生鑰匙
$key = $ci->encryption->create_key(16);

// 初始化
$ci->encryption->initialize([
    'cipher' => 'aes-256',
    'mode'   => 'ctr',
    'key'    => $key,
]);

$text = 'Hello World';

// 加密後得到 a1584939ff9e8148de798646095d6ed87d28835eab153237c8a5d0309cc2d6734c0d8965b5a37e82cac5dea85bc689092785ad2507fbb297e7c96f7ddff693349yfjO5YR1aiMplRt8vDMEgS3Ta9RfIEYIg7c
$ciphertext = $ci->encryption->encrypt($text);

// 解碼後得到 Hello World
echo $ci->encryption->decrypt($ciphertext);

我示範了 Codeigniter 的字串加解密類別庫,瀏覽器打開 helloworld.php 能看到結果。這樣一來,就能在任何 PHP 底下執行 Codeigniter ,接著發揮你的創意吧。

雖然這種使用方式無疑會跑完整個 codeigniter 生命週期,但因為 CI 的效能算是框架中快速的,中小型開發不會有太大的影響,所以這是一種把 Codeigniter 接在其他系統底下的方式,但是否使用就取決於你的決定。

Comments

  1. 很早就想改用FW去寫程序
    (第一是Laravel,好像很方便但又很麻煩,要求多.第二才是Codeigniter)
    但一直都沒開始~~

    • CI 的邏輯其實比較好懂。Laravel 簡化很多設計,底下很多運作初學者大都會不知道如何寫,是好也是壞。Laravel 比較推薦當作學第二套的 PHP Framework,或是本身已經有用過其他語言的 MVC 框架再來學。

發表迴響