跳到主要內容

CodeIgniter4 - PHP 程式開發框架

 因為最近比較常寫 PHP 程式,老是用舊方法開發已經有點發現 CP 值不高,想找些開發框架,也就是 MVC 框架來快速開發。

PHP 的 MVC 框架很多,相關資訊可以參考:php常用的7大框架

研究過 laraval、ThinkPHP、CodeIgniter等框架,最後選擇 CodeIgnite 4 (CI 4)來作為自己程式開發框架。

主要是因為自己已習慣使用 Smarty 作為網頁模版引擎,有找到在 CI4 中使用 Smarty Engine 的範例,其他的框架不是沒有相關範例,就有其自帶的模版引擎需要再學一遍。

所謂 MVC 架構:M 表 Model,就是專門處理資料庫相關的動作;V 表 View,處理網頁渲染,也就是慣用的 Smarty;C 表 Controller,處理所有程式動作。在 Controller 前面還有一個 Router 的角色,負責解析網址或輸入參數(一般為 GET),並發送到相對應的 Controller 或 觸發相對應的 Controller 去作處理。

以前自己寫的程式已經有一些些 MVC 的影子了,利用網址呼叫一支支 PHP 程式,裡面用 action 或 func 變數來執行對應的 function 程序,最後用 Smarty 作網頁渲染。所以轉換成 MVC 框架比較無痛,而且 MVC 框架多一個專門處理資料庫的 Model,節省了許多寫 SQL 語法的時間。

CodeIgnite 4

CodeIgnite 台灣:https://codeigniter.tw/

利用 composer 新增專案:composer create-project codeigniter4/appstarter <project-name>

以 php cli 建立 model, controller 等:php spark make:[controller | model]

建立好專案後,CI 4 會在專案資料夾中建新必要的資料


 app 資料夾中就是所有程式的核心,Router, Controller, Model, Views 和必要的設定檔都在其中。

public 資料夾是專案網頁的 root,所以要在 apache 等網頁伺服器設定將網頁路徑指到那邊。

writable 資料夾有關 logs, session 等系統儲存的資料。



 

留言

這個網誌中的熱門文章

SSH Tunnel(Port Forwarding)的應用

自己在管理伺服器和防火牆原則是最小開放原則,一定需要的服務 port 才會開放,例如網頁伺服器的 80、443 等。而管理用的 ssh ,可以的話就限縮來源 IP 範圍,加上限制可以登入的帳號或群組,要不然就改 port 編號;不過,改 port 編號會變成自己在遠端登入時要回想是改成多少,有點不是很方便。 所以最近建置的伺服器就不改 port 了,會加上 fail2ban 的防衛機制。 因為最小開放原則,像是 webmin(10000)這樣的 port 就不會開放,如果想要用的話,就用 ssh tunnel 方式作跳板連接。 例如伺服器的 public ip:123.123.123.123,要連 webmin 的話,就用: ssh 123.123.123.123 -L 10000:127.0.0.1:10000 SSH 登入後就會在客戶端開啟 127.0.0.1:10000 的監聽埠,用瀏覽器連本機的 127.0.0.1:10000 就會跳到伺服器端的 10000 埠。 一直以來,我都以為 ssh -L (Local Port Forwarding)方式只會在本機端綁定 127.0.0.1:xxxx的情形。不過,最近因為要解決一個臨時伺服器的設定問題,才發現原來不是只能綁在 127.0.0.1 上。 網路架構: 外部 public ip:123.123.123.0/24 內部 private ip:10.1.0.0/16 內部切出多個 class C的網路區域,其中 10.1.1.0/24 是 ServerZone,在外面用 DNAT 的方式將服務要求導入內部的伺服器。 其他 10.1.n.0/24 是各個區域內容IP,只能 NAT 出去,外部不能訪問到。 需求: Server-01:10.1.1.2,Server-02:10.1.20.2 Server-01在 ServerZone 內,從外部可以訪問,Server-02 在 PrivateZone 內,外部連不到。ServerZone 和 PrivateZone 彼此可以 SSH 互連。 現在希望可以在不變動兩台 Server 的 IP 區域,讓 Server-02可以被外部訪問到。 最簡單的方式就是先登 Server-01後,再從 Server-01 terminal 登到 Server-02上。但是需求是,...

Arudino 教學(三):多顆 LEDs

本次實作將加深 LED 電路,練習多顆 LEDs 與共地線電路,並使用 Arduino Uno 進行控制。另外, 本次實作每個同學需要抄寫「實作目的」、「線路說明」、「程式說明」與「進階」作為實作報告。 實作目的: 熟悉多顆 LEDs 與共地線電路接線 使用 Arduino 程式進行多顆 LEDs 控制 電路圖: 線路說明: LEDs 負極(短腳)共同連接在一起,再接至 Arduino GND(接地)腳位 LEDs 正極(長腳)先連接一220Ω 電阻之後,再分別連接至 Arduino 10 號與 11號腳位 程式截圖: 程式說明: 在 setup 區塊中,利用 pinMode 設定 10 腳位為輸出用途,設定 11 腳位為輸出用途 在 loop 區域中,利用 digitalWrite 送出 HIGH 點亮  LED,LOW 關閉 LED 燈,其中 10 號腳位 HIGH 時,11號腳位則為 LOW,反之亦然 delay(1000) 延遲一秒 進階: 改變延遲時間 增加閃動變化 增加 LED 的數量

CI 4.2.0 之後新增的 Auto Routing 設定

 一直以來都是利用  compose 來創建  CI4 的網站架構,在 CI4 更新到 4.2.0 版本之後,原本 function ***() 為作路徑的方式突然不能使用了,找了一下官網的說明之後,才發現有了新的 auto-routing 的設定。 Enable Auto Routing 開啟 auto-routing 的設定:修改 app/Config/Routes.php 設定 $routes->setAutoRoute(true) Enable Auto Routing (Improved) 基本上開啟上面的 auto-routing 的設定後,CI4 的路徑就會和以前一樣用 function name 來自動路由,但官網有建立還要再開啟 auto-routing(improved) 這個設定。 修改 app/Config/Features.php 開啟 auto-routing(improved)後,function 的名稱須要再加上 http method, 例如 getIndex()、postUpdate(),function 名稱配合 http method 才能正常執行,以增加網路安全,避免惡意的嚐試。