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 接在其他系統底下的方式,但是否使用就取決於你的決定。
tom
2018-09-26 - 15:31
很早就想改用FW去寫程序
(第一是Laravel,好像很方便但又很麻煩,要求多.第二才是Codeigniter)
但一直都沒開始~~
JSN
2018-09-27 - 09:45
CI 的邏輯其實比較好懂。Laravel 簡化很多設計,底下很多運作初學者大都會不知道如何寫,是好也是壞。Laravel 比較推薦當作學第二套的 PHP Framework,或是本身已經有用過其他語言的 MVC 框架再來學。