CodeIgniter 3.1と4.1の違い
(最終更新:2021-12-02)
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\Servicesservice()session()
- モデル
newするFactoriesmodel()
- ライブラリ
newするFactories
- 設定
newするFactoriesconfig()
- ビュー
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()とする必要がある
- バリデーション
- 変数の値を変更しなくなった
例えば、trimを指定しても検証中はtrimされるが、検証後の変数の値自体は変更されない- 値を整形する関数を指定しても無意味(検証中のそのルールの処理時に実行され値が一時的に整形されるが、false が返った場合にのみ検証が失敗とされる。次のルールの処理時には元の値が使用される)
- バリデーションルール
- フォーマットのルールは空文字を許可しなくなった
- 空文字を許可したい場合は
permit_emptyを追加する
参考
Date: 2021/02/22



![徹底攻略PHP5技術者認定[上級]試験問題集 [PJ0-200]対応 徹底攻略PHP5技術者認定[上級]試験問題集 [PJ0-200]対応](http://tatsu-zine.com/images/books/164/cover_s.jpg)

