バージョン 4.4.0
リリース日:2023年8月25日
CodeIgniter4の4.4.0リリース
ハイライト
デバッグツールバーに新しい「ホットリロード」機能が追加されました (貢献者 lonnieezell)。テスト を参照してください。
破壊的変更
動作変更
URI::setSegment() と存在しないセグメント
最後の +2
セグメントを設定すると、例外がスローされるようになりました。以前のバージョンでは、最後のセグメント +3
以上を指定した場合のみ例外がスローされていました。URI::setSegment() の変更 を参照してください。
現在の最後のセグメントの次のセグメント (+1
) は、以前と同様に設定できます。
ファクトリー
名前空間付きのクラス名を渡す
現在、preferApp
は、名前空間なしでクラス名をリクエストする場合にのみ機能します。
たとえば、model(\Myth\Auth\Models\UserModel::class)
または model('Myth\Auth\Models\UserModel')
を呼び出す場合
以前
存在する場合、
preferApp
が true (デフォルト) の場合、App\Models\UserModel
を返します。存在する場合、
preferApp
が false の場合、Myth\Auth\Models\UserModel
を返します。その後
preferApp
が true (デフォルト) の場合でも、Myth\Auth\Models\UserModel
を返します。
model()
を呼び出す前にFactories::define('models', 'Myth\Auth\Models\UserModel', 'App\Models\UserModel')
を定義した場合、App\Models\UserModel
を返します。
誤って存在しないクラス名を渡した場合、以前のバージョンでは、preferApp
機能により、App
または Config
名前空間のクラスインスタンスが返されていました。
たとえば、コントローラー (namespace App\Controllers
) で、誤って config(Config\App::class)
を呼び出した場合 (クラスに先頭の \
がないことに注意してください)、つまり実際には App\Controllers\Config\App
を渡したことになります。しかし、そのクラスは存在しないため、現在、ファクトリーは null
を返します。
プロパティ名
プロパティ Factories::$basenames
の名前が $aliases
に変更されました。
オートローダー
以前、CodeIgniterのオートローダーでは、.php拡張子で終わるクラス名をロードすることができました。つまり、new Foo.php() のようなオブジェクトをインスタンス化することができ、new Foo() としてインスタンス化されました。Foo.php は無効なクラス名であるため、オートローダーのこの動作は変更されました。現在、このようなクラスをインスタンス化しようとすると失敗します。
CodeIgniter と exit()
CodeIgniter::run()
メソッドは、exit(EXIT_SUCCESS)
を呼び出さなくなりました。exit 呼び出しは public/index.php に移動しました。
サイトURIの変更
URI
クラスを拡張し、サイトURIを表す新しい SiteURI
クラスが追加され、現在のURIが必要な多くの場所で使用されるようになりました。
コントローラー内の $this->request->getUri()
は、SiteURI
インスタンスを返します。また、site_url()
、base_url()
、および current_url()
は、内部的に SiteURI を使用します。
getPath()
getPath()
メソッドは、先頭に /
を付けたフルURIパスを常に返すようになりました。したがって、baseURLにサブディレクトリがあり、baseURLへの相対パスを取得する場合は、代わりに新しい getRoutePath()
メソッドを使用する必要があります。
例
baseURL: http://localhost:8888/CodeIgniter4/
The current URI: http://localhost:8888/CodeIgniter4/foo/bar
getPath(): /CodeIgniter4/foo/bar
getRoutePath(): foo/bar
サイトURIの値
SiteURIクラスは、以前よりも厳密にサイトURIを正規化するようになり、いくつかのバグが修正されました。
その結果、フレームワークは以前のバージョンとは若干異なるサイト URI または URI パスを返す場合があります。例えば、index.php
の後に /
が追加されます。
http://example.com/test/index.php?page=1
↓
http://example.com/test/index.php/?page=1
インターフェースの変更
注意
関連する CodeIgniter のコアクラスを拡張したり、これらのインターフェースを実装したりしていない限り、これらの変更はすべて後方互換性があり、何も手を加える必要はありません。
バリデーション:
ValidationInterface
にgetValidated()
メソッドが追加されました。
メソッドシグネチャの変更
パラメータの型変更
- サービス
Services::security()
の最初のパラメータがConfig\App
からConfig\Security
に変更されました。Services::session()
の最初のパラメータがConfig\App
からConfig\Session
に変更されました。
- セッション
Session::__construct()
の2番目のパラメータがConfig\App
からConfig\Session
に変更されました。データベースの
BaseHandler
、DatabaseHandler
、FileHandler
、MemcachedHandler
、およびRedisHandler
の__construct()
の最初のパラメータがConfig\App
からConfig\Session
に変更されました。
セキュリティ:
Security::__construct()
の最初のパラメータがConfig\App
からConfig\Security
に変更されました。バリデーション:
Validation::check()
のメソッドシグネチャが変更されました。$rule
パラメータのstring
型ヒントが削除されました。CodeIgniter:
CodeIgniter::setRequest()
のメソッドシグネチャが変更されました。$request
パラメータのRequest
型ヒントが削除されました。- FeatureTestCase
FeatureTestCase::populateGlobals()
のメソッドシグネチャが変更されました。$request
パラメータのRequest
型ヒントが削除されました。FeatureTestCase::setRequestBody()
のメソッドシグネチャが変更されました。$request
パラメータのRequest
型ヒントと戻り値の型Request
が削除されました。
パラメータの追加
ルーティング:
RouteCollection::__construct()
に3番目のパラメータRouting $routing
が追加されました。
パラメータの削除
サービス:
Services::exceptions()
の2番目のパラメータ$request
と3番目のパラメータ$response
が削除されました。エラー処理:
CodeIgniter\Debug\Exceptions::__construct()
の2番目のパラメータ$request
と3番目のパラメータ$response
が削除されました。
戻り値の型の変更
オートローダー: loadClass および loadClassmap メソッドの戻り値の型が void になり、spl_autoload_register および spl_autoload_unregister 関数のコールバックとして互換性を持つようになりました。
機能強化
コマンド
テスト
データベース
MySQLi: SQL クエリ後に取得される変数の型をデータベースで設定された型と一致させるために、データベース構成に
numberNative
属性が追加されました。「データベース設定」を参照してください。SQLSRV: フィールドメタデータに
nullable
が含まれるようになりました。「$db->getFieldData()」を参照してください。
モデル
メソッド名の衝突を避けるために、エンティティに特別なゲッター/セッターが追加されました。「特別なゲッター/セッター」を参照してください。
ライブラリ
バリデーション: 実際に検証されたデータを取得する
Validation::getValidated()
メソッドが追加されました。詳細は「検証済みデータの取得」を参照してください。画像: オプション
$quality
を使用して WebP 画像を圧縮できるようになりました。アップロードされたファイル: ディレクトリアップロードによってファイルがアップロードされた場合、ファイルの full_path インデックスの値を返す
UploadedFiles::getClientPath()
メソッドが追加されました。CURLRequest: リクエストオプション
proxy
が追加されました。「CURLRequest クラス」を参照してください。URI:
URI
を拡張し、サイト URI を表す新しいSiteURI
クラスが追加されました。
ヘルパーと関数
配列: データの値をグループ化する
array_group_by()
ヘルパー関数が追加されました。ドット表記構文をサポートします。共通:
force_https()
はアプリケーションを終了させなくなりましたが、RedirectException
をスローします。
その他
DownloadResponse: ブラウザでファイルを表示するための
Content-Disposition: inline
ヘッダーを設定するDownloadResponse::inline()
メソッドが追加されました。詳細は「ブラウザでファイルを開く」を参照してください。ビュー: 表示後のデータ自動クリーンを防ぐために、
renderSection()
にオプションの 2 番目のパラメータ$saveData
が追加されました。詳細は「ビューレイアウト」を参照してください。- 自動ルーティング (改善):
モジュールへのルーティングが可能になりました。詳細は「モジュールルーティング」を参照してください。
URIセグメントに対応するコントローラーが見つかり、そのコントローラーがそのURIセグメントに対して定義されたメソッドを持たない場合、デフォルトメソッドが実行されるようになりました。この追加により、自動ルーティングにおけるURIの処理がより柔軟になります。詳細はデフォルトメソッドフォールバックを参照してください。
フィルター: $filtersプロパティでフィルター引数を使用できるようになりました。
リクエスト: 有効なロケールを設定するための
IncomingRequest::setValidLocales()
メソッドが追加されました。テーブル: 行の列をヘッダーと同期するための
Table::setSyncRowsWithHeading()
メソッドが追加されました。詳細は行とヘッダーの同期を参照してください。エラー処理: カスタム例外ハンドラーを使用できるようになりました。
- RedirectException
最初の引数として、
ResponseInterface
を実装するオブジェクトを受け取ることもできます。ResponsableInterface
を実装しています。
- ファクトリー
実際にロードされるクラス名を定義できるようになりました。詳細はロードされるクラス名の定義を参照してください。
設定キャッシュが実装されました。詳細は設定キャッシュを参照してください。
メッセージの変更
Core.invalidDirectory
エラーメッセージが追加されました。HTTP.invalidHTTPProtocol
エラーメッセージが改善されました。
変更点
画像:
GDHandler
におけるWebPのデフォルトの品質が80から90に変更されました。- 設定
app/Config/App.phpの非推奨のCookie項目が削除されました。
app/Config/App.phpの非推奨のSession項目が削除されました。
app/Config/App.phpの非推奨のCSRF項目が削除されました。
ルーティング設定がapp/Config/Routing.php設定ファイルに移動されました。詳細はアップグレードガイドを参照してください。
DownloadResponse: レスポンスヘッダーを生成する際、
Content-Disposition
ヘッダーが以前に指定されていた場合は、それを置き換えなくなりました。- オートローダー
v4.4.0より前では、CodeIgniterオートローダーは、特定のオペレーティングシステムでファイル名に使用できない特殊文字を許可していませんでした。使用できる記号は、
/
、_
、.
、:
、\
、およびスペースです。そのため、(
、)
などの特殊文字を含むフォルダーにCodeIgniterをインストールした場合、CodeIgniterは動作しませんでした。v4.4.0以降、この制限は削除されました。Autoloader::loadClass()
およびAutoloader::loadClassmap()
メソッドは、どちらも@internal
としてマークされるようになりました。
RouteCollection: 保護されたプロパティ
$routes
の配列構造がパフォーマンスのために変更されました。HSTS:
force_https()
またはConfig\App::$forceGlobalSecureRequests = true
を設定すると、HTTPリクエストメソッドがリダイレクト後に保持されるHTTPステータスコード307が設定されるようになりました。以前のバージョンでは、302でした。
非推奨
エンティティ:
Entity::setAttributes()
は非推奨になりました。代わりにEntity::injectRawData()
を使用してください。エラー処理:
CodeIgniter\Debug\Exceptions
の多くのメソッドとプロパティが非推奨になりました。これらのメソッドはBaseExceptionHandler
またはExceptionHandler
に移動したためです。オートローダー:
Autoloader::sanitizeFilename()
は非推奨になりました。- CodeIgniter
CodeIgniter::$returnResponse
プロパティは非推奨になりました。もう使用されていません。CodeIgniter::$cacheTTL
プロパティは非推奨になりました。もう使用されていません。代わりにResponseCache
を使用してください。CodeIgniter::cache()
メソッドは非推奨になりました。もう使用されていません。代わりにResponseCache
を使用してください。CodeIgniter::cachePage()
メソッドは非推奨になりました。もう使用されていません。代わりにResponseCache
を使用してください。CodeIgniter::generateCacheName()
メソッドは非推奨になりました。もう使用されていません。代わりにResponseCache
を使用してください。CodeIgniter::callExit()
メソッドは非推奨になりました。もう使用されていません。
RedirectException:
\CodeIgniter\Router\Exceptions\RedirectException
は非推奨になりました。代わりに\CodeIgniter\HTTP\Exceptions\RedirectException
を使用してください。セッション:
Session
のプロパティ$sessionDriverName
、$sessionCookieName
、$sessionExpiration
、$sessionSavePath
、$sessionMatchIP
、$sessionTimeToUpdate
、および$sessionRegenerateDestroy
は非推奨となり、もう使用されていません。代わりに$config
を使用してください。セキュリティ:
Security
のプロパティ$csrfProtection
、$tokenRandomize
、$tokenName
、$headerName
、$expires
、$regenerate
、および$redirect
は非推奨となり、もう使用されていません。代わりに$config
を使用してください。- URI
URI::$uriString
は非推奨になりました。URI::$baseURL
は非推奨になりました。代わりにSiteURI
を使用してください。URI::setSilent()
は非推奨になりました。URI::setScheme()
は非推奨になりました。代わりにwithScheme()
を使用してください。URI::setURI()
は非推奨になりました。
- IncomingRequest
IncomingRequest::detectURI()
は非推奨となり、もう使用されていません。IncomingRequest::detectPath()
は非推奨となり、もう使用されていません。SiteURIFactory
に移動しました。IncomingRequest::parseRequestURI()
は非推奨となり、もう使用されていません。SiteURIFactory
に移動しました。IncomingRequest::parseQueryString()
は非推奨となり、もう使用されていません。SiteURIFactory
に移動しました。IncomingRequest::setPath()
は非推奨になりました。
バグ修正
自動ルーティング (改善): 以前のバージョンでは、
$translateURIDashes
がtrueの場合、2つのURIが1つのコントローラーメソッドに対応し、1つのURIがダッシュ付き (例: foo-bar)、もう1つのURIがアンダースコア付き (例: foo_bar) でした。このバグは修正されました。アンダースコア付きのURI (foo_bar) にはアクセスできなくなりました。出力バッファリング: 出力バッファリングに関するバグ修正。
ControllerTestTrait:
ControllerTestTrait::withUri()
は、URIを持つ新しいRequestインスタンスを作成します。RequestインスタンスはURIインスタンスを持つ必要があるためです。また、URI文字列のホスト名がConfig\App
で無効な場合、有効なホスト名が設定されます。
修正されたバグの完全なリストについては、リポジトリのCHANGELOG.mdを参照してください。