🔥
CodeIgniter 3.1と4.1の違い
CodeIgniter Advent Calendar 2021
CodeIgniter 3.1と4.1の違いについて簡単にまとめました。
動作環境
- CodeIgniter 3.1
- PHP 5.6以上推奨
- PHP 5.3.7で動作
- CodeIgniter 4.1
- PHP 7.3以上
重要な変更点
- 公式にComposerでのインストールをサポート
- 公式にPHPUnitによるアプリケーションテストをサポート
- 公式にHMVCに対応(コードモジュール)
- 名前空間の導入
- PSR-4準拠のオートローダーの導入
- CodeIgniter4が提供するクラスをサービスロケーター(Services)で管理
- CodeIgniterスーパーオブジェクトは廃止
- 公式コマンドsparkの提供
-
spark
によるコードジェネレーター
-
その他の主な追加機能
- .env及び環境変数による設定の変更
- RequestクラスとResponseクラスの導入
- 自動ルーティングを無効に設定可能
- コンテントネゴシエーション
- HTTPメソッドスプーフィング
- コンテンツセキュリティポリシー
- コントローラーフィルターの導入
- REST APIを提供するRESTful Resource Handling(RESTishなもの)
- Viewセル
- Viewレイアウト
-
Hook
をEventに置き換え - CodeIgniter\Modelの導入
- Entityクラスの導入
- ファクトリー(Factories)の導入
- ファクトリーはインスタンスの生成と管理をするサービスロケーター
- 公式にDBマイグレーションコマンドを提供
- 公式にDBシーディングを提供
- CURLRequestクラス
- Honeypotクラス
- Throttlerクラス
- CLIライブラリ
- デバッグツールバー
主なコーディングの違い
- PSR-4に準拠するクラス名及びクラスファイル名
- ビュー及びヘルパー以外の全てに名前空間が必要
- アプリケーションのデフォルトの名前空間は
App
- 設定の名前空間は
Config
- アプリケーションのデフォルトの名前空間は
-
$this->load->xxx()
がなくなる - コンポーネントのロード方法
- CodeIgniterのクラス(コアクラス、ライブラリ)
Config\Services
service()
session()
- モデル
-
new
する Factories
model()
-
- ライブラリ
-
new
する Factories
-
- 設定
-
new
する Factories
config()
-
- ビュー
view()
- ビューは中身を
echo
するか、return
するか、Responseオブジェクトにセットする
- ヘルパー
helper()
- コントローラーの
$helpers
プロパティ
- CodeIgniterのクラス(コアクラス、ライブラリ)
- コントローラーは次のプロパティを自動的に持つ
- Requestオブジェクト
$this->request
- Responseオブジェクト
$this->response
- Loggerオブジェクト
$this->logger
- Requestオブジェクト
細かな仕様変更
細かい仕様変更については、完全には把握し切れていませんが、それほどないと思います。
-
redirect()
- 引数と戻り値が完全に変わっているので注意
- コントローラーから
RedirectResponse
をreturn
する必要があるため、それができない場所では使えない - それ以前にセットしたCookieを送信するには、
redirect()->withCookies()
とする必要がある - それ以前にセットしたヘッダーを送信するには、
redirect()->withHeaders()
とする必要がある
- バリデーション
- 変数の値を変更しなくなった
- 値を整形する関数を指定しても無意味(検証中のそのルールの処理時に実行され値が一時的に整形されるが、false が返った場合にのみ検証が失敗とされる。次のルールの処理時には元の値が使用される)
- 変数の値を変更しなくなった
- バリデーションルール
- フォーマットのルールは空文字を許可しなくなった
- 空文字を許可したい場合は
permit_empty
を追加する
Discussion