3.xから4.xへのアップグレード

CodeIgniter 4はフレームワークの書き直しであり、後方互換性がありません。アップグレードというよりは、アプリケーションの変換と考える方が適切です。変換が完了すれば、CodeIgniter 4のあるバージョンから次のバージョンへのアップグレードは簡単になります。

「無駄がなく、シンプル」という哲学は維持されていますが、CodeIgniter 3と比較して実装には多くの違いがあります。

アップグレードのための12ステップのチェックリストはありません。代わりに、新しいプロジェクトフォルダにCodeIgniter 4のコピーを用意し、インストールして使用したい方法でインストールしてから、アプリケーションコンポーネントを変換して統合します。ここでは、最も重要な考慮事項を指摘するようにします。

プロジェクトをアップグレードするには、2つの主要なタスクに取り組む必要があります。まず、すべてのプロジェクトにとって重要であり、対処する必要がある一般的な調整がいくつかあります。2つ目は、CodeIgniterが構築されているライブラリであり、最も重要な関数のいくつかが含まれています。これらのライブラリは互いに独立して動作するため、1つずつ確認する必要があります。

プロジェクトの変換を開始する前に、ユーザーガイドを読んでください!

一般的な調整

ダウンロード

名前空間

  • CI4はPHP 7.4+向けに構築されており、ヘルパーファイルとlangファイルを除いて、フレームワーク内のすべてに名前空間が付けられています。

アプリケーション構造

  • **application**フォルダの名前が**app**に変更され、フレームワークには以前と同じ解釈で**system**フォルダがまだあります。

  • フレームワークは अब **public** フォルダを提供しており、これはアプリケーションのドキュメントルートとして意図されています。

  • defined('BASEPATH') OR exit('No direct script access allowed');行は、標準構成では**public**フォルダ外のファイルにアクセスできないため、必要ありません。また、CI4は定数BASEPATHを定義しなくなったため、すべてのファイルからこの行を削除してください。

  • キャッシュデータ、ログ、セッションデータを保存するための**writable**フォルダもあります。

  • **app**フォルダは、名前の変更といくつかのサブフォルダが**writable**フォルダに移動されていることを除けば、CI3の**application**フォルダと非常によく似ています。

  • フレームワークコンポーネントを拡張するためのメカニズムが異なるため、ネストされた**application/core**フォルダはなくなりました(下記参照)。

ルーティング

モデル、ビュー、コントローラー

  • CodeIgniterはMVCの概念に基づいています。そのため、モデル、ビュー、コントローラーの変更は、対処する必要がある最も重要なことの1つです。

  • CodeIgniter 4では、モデルは**app/Models**に配置され、php開始タグの直後にnamespace App\Models;use CodeIgniter\Model;を追加する必要があります。最後のステップは、extends CI_Modelextends Modelに置き換えることです。

  • CodeIgniter 4のビューは**app/Views**に移動されました。さらに、ビューの読み込み構文を$this->load->view('directory_name/file_name')からecho view('directory_name/file_name');に変更する必要があります。

  • CodeIgniter 4のコントローラーは**app/Controllers**に移動する必要があります。その後、php開始タグの後にnamespace App\Controllers;を追加します。最後に、extends CI_Controllerextends BaseControllerに置き換えます。

  • 詳細については、CodeIgniter4でMVCクラスを変換するためのステップバイステップの手順を示す、以下のアップグレードガイドをお勧めします。

クラスの読み込み

  • フレームワークコンポーネントの参照がコントローラーのプロパティとして魔法のように挿入されるCodeIgniterの「スーパーオブジェクト」はなくなりました。

  • クラスは必要な場所でインスタンス化され、フレームワークコンポーネントはサービスによって管理されます。

  • オートローダーは、App(**app**フォルダ)とCodeIgniter(つまり、**system**フォルダ)のトップレベルの名前空間内で、Composerの自動ロードサポートを使用して、PSR-4スタイルのクラスの検索を自動的に処理します。

  • 「HMVC」スタイルを含め、最も快適なアプリケーション構造をサポートするようにクラスの読み込みを設定できます。

  • CI4は、CI3の$this->loadのようにクラスを読み込んでインスタンスを共有できるファクトリーを提供します。

ライブラリ

  • アプリケーションクラスは引き続き**app/Libraries**内に配置できますが、必須ではありません。

  • CI3の$this->load->library('x');の代わりに、コンポーネントの名前空間規則に従って、$this->x = new \App\Libraries\X();を使用できるようになりました。または、ファクトリーを使用することもできます:$this->x = \CodeIgniter\Config\Factories::libraries('X');

ヘルパー

フック

  • フック は、イベント に置き換えられました。

  • CI3 の $hook['post_controller_constructor'] の代わりに、名前空間 CodeIgniter\Events\Events; を使用して、Events::on('post_controller_constructor', ['MyClass', 'MyFunction']); を使用します。

  • イベントは常に有効になっており、グローバルに使用できます。

  • フックポイント pre_controllerpost_controller は削除されました。コントローラーフィルター を代わりに使用してください。

  • フックポイント display_overridecache_override は削除されました。ベースメソッドが削除されたためです。

  • フックポイント post_system は、最終的にレンダリングされたページを送信する直前に移動しました。

エラー処理

  • CI4 の動作が若干変更されました。

    • CI3 では、動作は **index.php** ファイルで設定されます

      • error_reporting() で設定されたエラーレベルのエラーはログに記録されます(ただし、log_threshold 設定によっては、ログファイルに書き込まれない場合があります)。

      • エラーレベルが E_ERROR | E_PARSE | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR のエラーは、error_reporting() で設定されたエラーレベルに関係なく、フレームワークの処理を停止しました。

    • CI4 では、動作は **app/Config/Boot/{environment}.php** ファイルで設定されます

      • error_reporting() で設定されたエラーレベルのエラーはログに記録されます(ただし、Config\Logger::$threshold 設定によっては、ログファイルに書き込まれない場合があります)。

      • error_reporting() によって無視されないすべてのエラーは、フレームワークの処理を停止します。

フレームワークの拡張

  • MY_... フレームワークコンポーネントの拡張または置換を保持するために **core** フォルダーは必要ありません。

  • CI4 の部分を拡張または置換するために、ライブラリフォルダー内に MY_X クラスは必要ありません。

  • そのようなクラスを好きな場所に作成し、**app/Config/Services.php** に適切なサービスメソッドを追加して、デフォルトのコンポーネントの代わりにコンポーネントを読み込みます。

  • 詳細については、コアシステムクラスの作成 を参照してください。

ライブラリのアップグレード

  • アプリケーションクラスは引き続き**app/Libraries**内に配置できますが、必須ではありません。

  • CI3の$this->load->library('x');の代わりに、コンポーネントの名前空間規則に従って、$this->x = new \App\Libraries\X();を使用できるようになりました。または、ファクトリーを使用することもできます:$this->x = \CodeIgniter\Config\Factories::libraries('X');

  • CodeIgniter 3 の一部のライブラリは、バージョン 4 では存在しなくなりました。これらのライブラリについては、関数を実装するための新しい方法を見つける必要があります。これらのライブラリは、カレンダリングFTPJavascriptショッピングカートトラックバックXML-RPC /-Server、および Zip エンコーディング です。

  • CI3 の 入力 は、CI4 の 受信リクエスト に対応します。

  • CI3 の 出力 は、CI4 の レスポンス に対応します。

  • CodeIgniter の両方のバージョンに存在する他のすべてのライブラリは、いくつかの調整を加えてアップグレードできます。最も重要で、よく使用されるライブラリには、アップグレードガイドが用意されています。このガイドでは、簡単な手順と例を使用して、コードを調整するのに役立ちます。