🔥

CodeIgniter 3.1と4.1の違い

2021/12/01に公開

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以上

重要な変更点

その他の主な追加機能

主なコーディングの違い

  • 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プロパティ
  • コントローラーは次のプロパティを自動的に持つ
    • Requestオブジェクト $this->request
    • Responseオブジェクト $this->response
    • Loggerオブジェクト $this->logger

細かな仕様変更

細かい仕様変更については、完全には把握し切れていませんが、それほどないと思います。

  • redirect()
    • 引数と戻り値が完全に変わっているので注意
    • コントローラーからRedirectResponsereturnする必要があるため、それができない場所では使えない
    • それ以前にセットしたCookieを送信するには、redirect()->withCookies()とする必要がある
    • それ以前にセットしたヘッダーを送信するには、redirect()->withHeaders()とする必要がある
  • バリデーション
    • 変数の値を変更しなくなった
      • 値を整形する関数を指定しても無意味(検証中のそのルールの処理時に実行され値が一時的に整形されるが、false が返った場合にのみ検証が失敗とされる。次のルールの処理時には元の値が使用される)
  • バリデーションルール
    • フォーマットのルールは空文字を許可しなくなった
    • 空文字を許可したい場合はpermit_emptyを追加する

参考

Discussion