3.xから4.xへのアップグレード
CodeIgniter 4はフレームワークの書き直しであり、後方互換性がありません。アップグレードというよりは、アプリケーションの変換と考える方が適切です。変換が完了すれば、CodeIgniter 4のあるバージョンから次のバージョンへのアップグレードは簡単になります。
「無駄がなく、シンプル」という哲学は維持されていますが、CodeIgniter 3と比較して実装には多くの違いがあります。
アップグレードのための12ステップのチェックリストはありません。代わりに、新しいプロジェクトフォルダにCodeIgniter 4のコピーを用意し、インストールして使用したい方法でインストールしてから、アプリケーションコンポーネントを変換して統合します。ここでは、最も重要な考慮事項を指摘するようにします。
プロジェクトをアップグレードするには、2つの主要なタスクに取り組む必要があります。まず、すべてのプロジェクトにとって重要であり、対処する必要がある一般的な調整がいくつかあります。2つ目は、CodeIgniterが構築されているライブラリであり、最も重要な関数のいくつかが含まれています。これらのライブラリは互いに独立して動作するため、1つずつ確認する必要があります。
プロジェクトの変換を開始する前に、ユーザーガイドを読んでください!
一般的な調整
ダウンロード
CI4は、すぐに実行できるzipまたはtarballとしても入手できます。
Composerを使用してインストールすることもできます。
名前空間
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**フォルダはなくなりました(下記参照)。
ルーティング
自動ルーティングはデフォルトで無効になっています。デフォルトでは、すべてのルートを定義する必要があります。
CI3と同じ方法で自動ルーティングを使用する場合は、自動ルーティング(レガシー)を有効にする必要があります。
CI4には、オプションでより安全な新しい自動ルーティング(改良)もあります。
モデル、ビュー、コントローラー
CodeIgniterはMVCの概念に基づいています。そのため、モデル、ビュー、コントローラーの変更は、対処する必要がある最も重要なことの1つです。
CodeIgniter 4では、モデルは**app/Models**に配置され、php開始タグの直後に
namespace App\Models;
とuse CodeIgniter\Model;
を追加する必要があります。最後のステップは、extends CI_Model
をextends 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_Controller
をextends 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');
。
ヘルパー
ヘルパーは以前とほぼ同じですが、いくつか簡略化されています。
v4.3.0以降、CI3と同様に**app/Config/Autoload.php**でヘルパーを自動ロードできます。
CodeIgniter 3 の一部のヘルパーは、バージョン 4 では存在しなくなりました。これらのヘルパーについては、関数を実装するための新しい方法を見つける必要があります。これらのヘルパーは、CAPTCHA ヘルパー、メールヘルパー、パスヘルパー、および スマイリーヘルパー です。
CI3 の ダウンロードヘルパー は削除されました。
force_download()
を使用している場合は、Response オブジェクトを使用する必要があります。ファイルの強制ダウンロード を参照してください。CI3 の 言語ヘルパー は削除されました。ただし、
lang()
は CI4 で常に使用できます。lang()
を参照してください。CI3 の タイポグラフィヘルパー は、CI4 では タイポグラフィライブラリ になります。
CI3 の ディレクトリヘルパー と ファイルヘルパー は、CI4 では ファイルシステムヘルパー になります。
- CI4 では、
redirect()
は CI3 のものから完全に変更されました。 CI4 では、
redirect()
は、リダイレクトしてスクリプトの実行を終了する代わりに、RedirectResponse
インスタンスを返します。コントローラーまたはコントローラーフィルターから返す必要があります。redirect()
を呼び出す前に設定した Cookie とヘッダーは、RedirectResponse
に自動的に引き継がれません。送信する場合は、withCookies()
またはwithHeaders()
を手動で呼び出す必要があります。CI3 の
redirect('login/form')
は、return redirect()->to('login/form')
に変更する必要があります。
- CI4 では、
フック
CI3 の
$hook['post_controller_constructor']
の代わりに、名前空間CodeIgniter\Events\Events;
を使用して、Events::on('post_controller_constructor', ['MyClass', 'MyFunction']);
を使用します。イベントは常に有効になっており、グローバルに使用できます。
フックポイント
pre_controller
とpost_controller
は削除されました。コントローラーフィルター を代わりに使用してください。フックポイント
display_override
とcache_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 では存在しなくなりました。これらのライブラリについては、関数を実装するための新しい方法を見つける必要があります。これらのライブラリは、カレンダリング、FTP、Javascript、ショッピングカート、トラックバック、XML-RPC /-Server、および Zip エンコーディング です。
CodeIgniter の両方のバージョンに存在する他のすべてのライブラリは、いくつかの調整を加えてアップグレードできます。最も重要で、よく使用されるライブラリには、アップグレードガイドが用意されています。このガイドでは、簡単な手順と例を使用して、コードを調整するのに役立ちます。