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()
の戻り値が変更されました。バインドされたパラメーターを含むクエリではなく、実際に実行されたクエリを返すようになりました。testMode
がtrue
の場合、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