4.2.12から4.3.0へのアップグレード
お使いのインストール方法に対応するアップグレード手順を参照してください。
Composerのバージョン
重要
Composerを使用している場合、CodeIgniter v4.3.0にはComposer 2.0.14以降が必要です。
古いバージョンのComposerを使用している場合は、composer
ツールをアップグレードし、vendor/ ディレクトリを削除して、再度composer update
を実行してください。
たとえば、手順は次のとおりです
composer self-update
rm -rf vendor/
composer update
必須ファイル変更
spark
次のファイルには大幅な変更が加えられており、更新されたバージョンをアプリケーションとマージする必要があります
spark
重要
このファイルを更新しないと、composer update
の実行後、Sparkコマンドがまったく機能しません。
たとえば、アップグレード手順は次のとおりです
composer update
cp vendor/codeigniter4/framework/spark .
設定ファイル
app/Config/Kint.php
app/Config/Kint.php は、Kint 5.0用に更新されました。
次のように置き換える必要があります
Kint\Renderer\Renderer
をKint\Renderer\AbstractRenderer
にRenderer::SORT_FULL
をAbstractRenderer::SORT_FULL
に
app/Config/Exceptions.php
PHP 8.2を使用している場合は、新しいプロパティ
$logDeprecations
および$deprecationLogLevel
を追加する必要があります。
モック設定クラス
テストで次のモック設定クラスを使用している場合は、app/Config の対応する設定ファイルを更新する必要があります
MockAppConfig
(Config\App
)MockCLIConfig
(Config\App
)MockSecurityConfig
(Config\Security
)
これらの設定クラスのプロパティに types を追加します。プロパティ型に合わせてプロパティ値を修正する必要がある場合があります。
composer.json
CodeIgniterを手動でインストールし、Composerを使用している場合は、次の行を削除して、composer update
を実行する必要があります。
{
...
"require": {
...
"kint-php/kint": "^4.2", <-- Remove this line
...
},
...
"scripts": {
"post-update-cmd": [
"CodeIgniter\\ComposerScripts::postUpdate" <-- Remove this line
],
"test": "phpunit"
},
...
}
破壊的な変更
データベース例外の変更
データベースエラーが発生した場合、例外クラスが変更される可能性があります。例外をキャッチする場合は、コードが例外をキャッチできることを確認する必要があります。
CI_DEBUG
が false の場合でも、いくつかの例外がスローされるようになりました。トランザクション中、
DBDebug
が true の場合でも、デフォルトでは例外はスローされません。例外をスローさせたい場合は、transException(true)
を呼び出す必要があります。「例外のスロー」を参照してください。詳しくは、「データベースエラー発生時の例外」を参照してください。
キャッチされなかった例外のHTTPステータスコードと終了コード
例外コード を HTTPステータスコード として期待している場合、HTTPステータスコードが変更されます。その場合は、例外で
HTTPExceptionInterface
を実装する必要があります。「例外でHTTPステータスコードを指定する」を参照してください。例外コード に基づいて 終了コード を期待している場合、終了コードが変更されます。その場合は、例外で
HasExitCodeInterface
を実装する必要があります。「例外で終了コードを指定する」を参照してください。
redirect()->withInput()とバリデーションエラー
redirect()->withInput()
とバリデーションエラーには、文書化されていない動作がありました。withInput()
でリダイレクトする場合、CodeIgniterはセッションにバリデーションエラーを保存し、リダイレクトされたページのバリデーションオブジェクトから (新しいバリデーションが実行される前に) エラーを取得できます。
// In the controller
if (! $this->validate($rules)) {
return redirect()->back()->withInput();
}
// In the view of the redirected page
<?= service('Validation')->listErrors() ?>
この動作はバグであり、v4.3.0で修正されました。
バグに依存するコードがある場合は、コードを変更する必要があります。バリデーションオブジェクトの代わりに、新しいフォームヘルパー、validation_errors()
、validation_list_errors()
、および validation_show_error()
を使用して、バリデーションエラーを表示します。
バリデーションの変更
ValidationInterface
が変更されました。実装されたクラスも同様に、LSPを壊さないようにメソッドとパラメータを追加する必要があります。詳細については、バリデーションの変更を参照してください。Validation::loadRuleGroup()
の戻り値が、$group
が空の場合にnull
から[]
に変更されました。この動作に依存している場合は、コードを更新してください。
時間の修正
バグ修正により、Time の一部のメソッドが可変の動作から不変の動作に変更されました。
Time
はDateTimeImmutable
を継承するようになりました。詳細については、変更履歴を参照してください。変更前の
Time
の動作が必要な場合は、互換性のあるTimeLegacy
クラスが追加されました。アプリケーションコード内のすべてのTime
をTimeLegacy
に置き換えてください。ただし、
TimeLegacy
は非推奨です。したがって、コードを更新することをお勧めします。
例:
// Before
$time = Time::now();
// ...
if ($time instanceof DateTime) {
// ...
}
// After
$time = Time::now();
// ...
if ($time instanceof DateTimeInterface) {
// ...
}
// Before
$time1 = new Time('2022-10-31 12:00');
$time2 = $time1->modify('+1 day');
echo $time1; // 2022-11-01 12:00:00
echo $time2; // 2022-11-01 12:00:00
// After
$time1 = new Time('2022-10-31 12:00');
$time2 = $time1->modify('+1 day');
echo $time1; // 2022-10-31 12:00:00
echo $time2; // 2022-11-01 12:00:00
テストでの STDERR および STDOUT ストリームのキャプチャ
エラーおよび出力ストリームのキャプチャ方法が変更されました。現在は、以下の代わりに
use CodeIgniter\Test\Filters\CITestStreamFilter;
protected function setUp(): void
{
CITestStreamFilter::$buffer = '';
$this->streamFilter = stream_filter_append(STDOUT, 'CITestStreamFilter');
$this->streamFilter = stream_filter_append(STDERR, 'CITestStreamFilter');
}
protected function tearDown(): void
{
stream_filter_remove($this->streamFilter);
}
以下を使用する必要があります。
use CodeIgniter\Test\Filters\CITestStreamFilter;
protected function setUp(): void
{
CITestStreamFilter::registration();
CITestStreamFilter::addOutputFilter();
CITestStreamFilter::addErrorFilter();
}
protected function tearDown(): void
{
CITestStreamFilter::removeOutputFilter();
CITestStreamFilter::removeErrorFilter();
}
または、トレイト CodeIgniter\Test\StreamFilterTrait
を使用します。詳細については、CLI出力のテストを参照してください。
インターフェースの変更
いくつかのインターフェースが修正されました。詳細については、インターフェースの変更を参照してください。
外部キーデータ
BaseConnection::getForeignKeyData()
によって返されるデータ構造が変更されました。このメソッドに依存するコードは、新しい構造を使用するように調整する必要があります。
例: tableprefix_table_column1_column2_foreign
返されるデータは、次の構造を持ちます。
/**
* @return array[
* {constraint_name} =>
* stdClass[
* 'constraint_name' => string,
* 'table_name' => string,
* 'column_name' => string[],
* 'foreign_table_name' => string,
* 'foreign_column_name' => string[],
* 'on_delete' => string,
* 'on_update' => string,
* 'match' => string
* ]
* ]
*/
破壊的な拡張
複数ドメインのサポート
Config\App::$allowedHostnames
を設定した場合、base_url()
,current_url()
,site_url()
などの URL 関連の関数は、現在の URL が一致する場合、Config\App::$allowedHostnames
に設定されたホスト名を含む URL を返します。
データベース
CodeIgniter\Database\Database::loadForge()
の戻り値の型がForge
に変更されました。拡張クラスも同様に型を変更する必要があります。CodeIgniter\Database\Database::loadUtils()
の戻り値の型がBaseUtils
に変更されました。拡張クラスも同様に型を変更する必要があります。BaseBuilder::updateBatch()
の2番目のパラメータ$index
が$constraints
に変更されました。配列、文字列、またはRawSql
の型を受け入れるようになりました。拡張クラスも同様に型を変更する必要があります。BaseBuilder::insertBatch()
およびBaseBuilder::updateBatch()
の$set
パラメータは、単一行のデータオブジェクトを受け入れるようになりました。拡張クラスも同様に型を変更する必要があります。BaseBuilder::_updateBatch()
の3番目のパラメータ$index
が$values
に変更され、パラメータの型がarray
に変更されました。拡張クラスも同様に型を変更する必要があります。Model::update()
メソッドは、WHERE句なしでSQLステートメントを生成した場合、DatabaseException
を発生させるようになりました。テーブル内のすべてのレコードを更新する必要がある場合は、代わりにQuery Builderを使用してください。例:$model->builder()->update($data)
。
ハニーポットとCSP
CSPが有効になっている場合、ハニーポットフィールドのコンテナタグに `id="hpc"` 属性が注入され、フィールドが非表示になります。ビューでこのIDが既に使用されている場合は、Config\Honeypot::$containerId
で変更する必要があります。また、Config\Honeypot::$container
の style="display:none"
を削除できます。
その他
ヘルパー:
html_helper
、form_helper
、または一般的な関数内の void HTML 要素(例:<input>
)がデフォルトでHTML5互換になるように変更され、XHTMLと互換性を持たせる必要がある場合は、 **app/Config/DocTypes.php** の$html5
プロパティをfalse
に設定する必要があります。CLI: Sparkコマンドの起動が
CodeIgniter\CodeIgniter
から抽出されたため、Services::codeigniter()
サービスが上書きされている場合、これらのコマンドの実行に問題が発生する可能性があります。
プロジェクトファイル
プロジェクトスペース (ルート、app、public、writable) 内の多数のファイルが更新されました。これらのファイルは **system** スコープ外にあるため、ユーザーの介入なしに変更されることはありません。プロジェクトスペースへの変更のマージを支援する、いくつかのサードパーティ製CodeIgniterモジュールが利用可能です: Packagistで探索する。
コンテンツの変更
以下のファイルは、重大な変更(非推奨や視覚的な調整を含む)を受けており、更新されたバージョンをアプリケーションにマージすることをお勧めします。
Config
- app/Config/App.php
$baseURL
のホスト名以外のサイトURLで許可されたホスト名を設定するために、新しいプロパティ$allowedHostnames
が追加されました。複数ドメインのサポートを参照してください。プロパティ
$appTimezone
が、夏時間の影響を受けないようにUTC
に変更されました。
- app/Config/Autoload.php
ヘルパーを自動ロードするために、新しいプロパティ
$helpers
が追加されました。
- app/Config/Database.php
$default['DBDebug']
および$test['DBDebug']
が、デフォルトでtrue
に変更されました。データベースエラー発生時の例外を参照してください。
- app/Config/DocTypes.php
void HTML要素(例:
<input>
)の斜線 (/
) 文字を削除するかどうかを決定するプロパティ$html5
が追加され、HTML5互換性のためにデフォルトでtrue
に設定されました。
- app/Config/Encryption.php
CI3暗号化との互換性のために、新しいプロパティ
$rawData
、$encryptKeyInfo
、および$authKeyInfo
が追加されました。CI3との互換性を維持するための設定を参照してください。
- app/Config/Exceptions.php
2つの追加のパブリックプロパティ
$logDeprecations
および$deprecationLogLevel
が追加されました。詳細については、非推奨警告のロギングを参照してください。
- app/Config/Honeypot.php
CSPが有効な場合にコンテナタグのid属性値を設定するための新しいプロパティ
$containerId
が追加されました。プロパティ
$template
値のinput
タグが、HTML5互換に変更されました。
- app/Config/Logger.php
プロパティ
$threshold
が、production
環境以外では9
に変更されました。
- app/Config/Modules.php
パフォーマンス向上のため、Composerパッケージの自動検出を制限するために、新しいプロパティ
$composerPackages
が追加されました。
- app/Config/Routes.php
Sparkコマンドの実行方法が変更されたため、フレームワークの内部ルートをロードする必要がなくなりました(
SYSTEMPATH . 'Config/Routes.php'
)。
- app/Config/Security.php
CSRFチェックが失敗した場合のリダイレクトを防ぐために、プロパティ
$redirect
の値をfalse
に変更しました。これにより、CSRFエラーであることを認識しやすくするためです。
- app/Config/Session.php
セッション設定を処理するために追加されました。
- app/Config/Validation.php
デフォルトのバリデーションルールが、セキュリティ向上のため厳格なルールに変更されました。従来型ルールと厳格ルールを参照してください。
ビューファイル
以下のビューファイルが、HTML5互換のタグに変更されました。また、エラーメッセージはErrors言語ファイルで定義されるようになりました。
app/Views/errors/html/error_404.php
app/Views/errors/html/error_exception.php
app/Views/errors/html/production.php
app/Views/welcome_message.php
すべての変更
これは、プロジェクト空間内で変更されたすべてのファイルのリストです。多くは、ランタイムに影響を与えない単純なコメントやフォーマット変更です。Config
クラス内のすべてのプリミティブ型プロパティは型付けされています。
app/Config/App.php
app/Config/Autoload.php
app/Config/CURLRequest.php
app/Config/Cache.php
app/Config/ContentSecurityPolicy.php
app/Config/Cookie.php
app/Config/Database.php
app/Config/DocTypes.php
app/Config/Email.php
app/Config/Encryption.php
app/Config/Exceptions.php
app/Config/Feature.php
app/Config/Filters.php
app/Config/Format.php
app/Config/Generators.php
app/Config/Honeypot.php
app/Config/Images.php
app/Config/Kint.php
app/Config/Logger.php
app/Config/Migrations.php
app/Config/Mimes.php
app/Config/Modules.php
app/Config/Pager.php
app/Config/Paths.php
app/Config/Routes.php
app/Config/Security.php
app/Config/Session.php
app/Config/Toolbar.php
app/Config/UserAgents.php
app/Config/Validation.php
app/Views/errors/html/error_404.php
app/Views/errors/html/error_exception.php
app/Views/errors/html/production.php
app/Views/welcome_message.php
composer.json
env
phpunit.xml.dist
spark