4.1.4 から 4.1.5 へのアップグレード

インストール方法に対応するアップグレード手順を参照してください。

破壊的変更

BaseBuilder および Model クラスの set() メソッドの変更

$value パラメーターの型キャストが削除されました。これは、配列と文字列を set() メソッドに渡した場合の処理が異なるというバグを修正するためです。BaseBuilder クラスまたは Model クラスを拡張して set() メソッドを変更した場合は、その定義を public function set($key, ?string $value = '', ?bool $escape = null) から public function set($key, $value = '', ?bool $escape = null) に変更する必要があります。

Session DatabaseHandler のデータベーステーブルの変更

最適化のため、セッションテーブルの次の列の型が変更されました。

  • MySQL
    • timestamp

  • PostgreSQL
    • ip_address

    • timestamp

    • data

セッションテーブルの定義を更新してください。新しい定義については、セッションライブラリを参照してください。

この変更は v4.1.2 で導入されました。しかし、バグのため、DatabaseHandler ドライバーが正しく動作しませんでした。

CSRF 保護

バグ修正により、CSRF フィルターが適用されている場合、CSRF 保護は **POST** だけでなく **PUT/PATCH/DELETE** リクエストにも機能するようになりました。

**PUT/PATCH/DELETE** リクエストを使用する場合は、CSRF トークンを送信する必要があります。または、それらのリクエストに対して CSRF 保護が不要な場合は、CSRF フィルターを削除してください。

以前のバージョンと同じ動作にするには、**app/Config/Filters.php** で次のように CSRF フィルターを設定します。

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Filters extends BaseConfig
{
    // ...

    public $methods = [
        'get'  => ['csrf'],
        'post' => ['csrf'],
    ];
    // ...
}

**GET** メソッドの保護は、form_open() による CSRF フィールドの自動生成を使用する場合のみ必要です。

警告

一般的に、$methods フィルターを使用する場合は、自動ルーティング(レガシー)の無効化を行う必要があります。なぜなら、自動ルーティング(レガシー) は、コントローラーへのアクセスに任意の HTTP メソッドを許可するためです。予期しないメソッドでコントローラーにアクセスすると、フィルターをバイパスする可能性があります。

CURLRequest ヘッダーの変更

以前のバージョンでは、独自のヘッダーを提供しなかった場合、CURLRequest はブラウザからのリクエストヘッダーを送信していました。このバグは修正されました。リクエストがヘッダーに依存している場合、アップグレード後にリクエストが失敗する可能性があります。この場合は、必要なヘッダーを手動で追加してください。追加方法については、CURLRequest クラスを参照してください。

Query Builder の変更

最適化とバグ修正のため、主にテストで使用される次の動作が変更されました。

  • insertBatch()updateBatch() を使用する場合、$query->getOriginalQuery() の戻り値が変更されました。バインドされたパラメーターを含むクエリではなく、実際に実行されたクエリを返すようになりました。

  • testModetrue の場合、insertBatch() は影響を受けた行の数ではなく、SQL 文字列の配列を返すようになります。この変更は、戻り値のデータ型を updateBatch() メソッドと同じにするために行われました。

破壊的な拡張機能

ルートに対する複数のフィルター

ルートに複数のフィルターを設定する新しい機能です。

重要

この機能はデフォルトで無効になっています。下位互換性を壊すためです。

この機能を使用するには、app/Config/Feature.php$multipleFilters プロパティを true に設定する必要があります。有効にすると

  • CodeIgniter\CodeIgniter::handleRequest()
    • CodeIgniter\Filters\Filters::enableFilters()enableFilter() の代わりに使用します。

  • CodeIgniter\CodeIgniter::tryToRouteIt()
    • getFilter()ではなくCodeIgniter\Router\Router::getFilters()を使用してください。

  • CodeIgniter\Router\Router::handle()
    • プロパティ$filterInfoではなく$filtersInfoを使用します。

    • getFilterForRoute()ではなくCodeIgniter\Router\RouteCollection::getFiltersForRoute()を使用してください。

上記クラスを拡張している場合は、変更する必要があります。

以下のメソッドとプロパティは非推奨となりました。

  • CodeIgniter\Filters\Filters::enableFilter()

  • CodeIgniter\Router\Router::getFilter()

  • CodeIgniter\Router\RouteCollection::getFilterForRoute()

  • CodeIgniter\Router\RouteCollectionのプロパティ$filterInfo

機能については、フィルタの適用を参照してください。

プロジェクトファイル

プロジェクト空間(ルート、app、public、writable)の多数のファイルが更新されました。これらのファイルはシステムスコープ外にあるため、ユーザーによる介入なしに変更されることはありません。プロジェクト空間に変更をマージするのに役立つサードパーティ製のCodeIgniterモジュールがいくつかあります。Packagistで確認する

注記

バグ修正のための非常にまれなケースを除き、プロジェクト空間のファイルに加えられた変更によってアプリケーションが壊れることはありません。ここで説明されている変更はすべて、次のメジャーバージョンまではオプションであり、必須の変更は上記のセクションで説明します。

コンテンツの変更

以下のファイルは、(非推奨化または視覚的な調整を含む)重要な変更が加えられたため、更新されたバージョンをアプリケーションとマージすることをお勧めします。

  • app/Config/CURLRequest.php

  • app/Config/Cache.php

  • app/Config/Feature.php

  • app/Config/Generators.php

  • app/Config/Publisher.php

  • app/Config/Security.php

  • app/Views/welcome_message.php

すべての変更

これは、変更を受けたプロジェクト空間内のすべてのファイルのリストです。多くのファイルは、ランタイムに影響を与えない単純なコメントやフォーマット変更です。

  • app/Config/CURLRequest.php

  • app/Config/Cache.php

  • app/Config/Feature.php

  • app/Config/Generators.php

  • app/Config/Kint.php

  • app/Config/Publisher.php

  • app/Config/Security.php

  • app/Views/welcome_message.php