バージョン 4.2.0
リリース日:2022年6月3日
CodeIgniter4の4.2.0リリース
ハイライト
最小PHP要件を7.4に更新。
デフォルトの設定をより安全にするために、自動ルーティングはデフォルトで無効に変更されました。
改良された自動ルーティング(オプトイン)(kenjis氏提供)。新しい改良された自動ルーティングを参照してください。
QueryBuilderのサブクエリとUNIONのサポート(Andrey Pyzhikov氏提供)。データベースを参照してください。
新規コントリビューター
@fdomgjoni99 は#5608で最初の貢献を行いました。
@beganovich は#5823で最初の貢献を行いました。
@michaelrk02 は#5878で最初の貢献を行いました。
@valmorflores は#6051で最初の貢献を行いました。
@lonnie-vault は#6060で最初の貢献を行いました。
破壊的変更
メソッドシグネチャの変更
CodeIgniter\Database\BaseBuilder::join()
とCodeIgniter\Database\*\Builder::join()
のメソッドシグネチャが変更されました。Validation::setRule()
のメソッドシグネチャが変更されました。$rules
パラメータのstring
型ヒントが削除されました。拡張クラスも同様にパラメータを削除する必要があります(LSPを破らないように)。CodeIgniter\CLI\CommandRunner::_remap()
のメソッドシグネチャがバグ修正のために変更されました。Service::reset()
とCIUnitTestCase::resetServices()
のデフォルトパラメータ値がfalse
からtrue
に変更されました。これは、テスト中の予期しない問題(例:lang()
が翻訳されたメッセージを取得しないなど)を排除するためです。
動作の変更
CodeIgniter\CodeIgniter
クラスに新しいプロパティ$context
が追加され、実行時に正しいコンテキストを持つ必要があります。そのため、以下のファイルが変更されました。public/index.php
spark
system/bootstrap.php
ファイルは、プリローディングを容易に実装するために修正されました。CodeIgniter
インスタンスの返却と.env
ファイルの読み込みはindex.php
とspark
に移されました。CodeIgniter\Autoloader\Autoloader::initialize()
の動作がバグ修正のために変更されました。以前は、$modules->discoverInComposer
がtrueの場合のみComposerのクラスマップを使用していました。現在は、Composerが利用可能な場合は常にComposerのクラスマップを使用します。CLI::color()によって出力されるカラーコードがバグ修正のために変更されました。
ウェブブラウザからの予期しないアクセスを防ぐため、コントローラーがcliルート(
$routes->cli()
)に追加された場合、そのコントローラーのすべてのメソッドは自動ルーティング経由ではアクセスできなくなりました。History Collectorを拡張しているユーザーに対して、後方互換性を壊す可能性があります。おそらく
History::setFiles()
メソッドを更新する必要があります。dot_array_search()
の予期しない動作が修正されました。現在dot_array_search('foo.bar.baz', ['foo' => ['bar' => 23]])
はnull
を返します。以前のバージョンでは23
を返していました。CodeIgniter::storePreviousURL()
は、Content-Typeがtext/html
のURLのみを保存するように変更されました。これにより、previous_url()
とredirect()->back()
の動作にも影響します。
機能強化
新しい改良された自動ルーティング
より安全な新しいオプションの自動ルーターを追加しました。従来の自動ルーティングからの変更点は次のとおりです。
- コントローラーメソッドには、
getIndex()
、postCreate()
のようにHTTP動詞プレフィックスが必要です。 開発者は常にHTTPメソッドを知っているので、予期しないHTTPメソッドによるリクエストは通過しません。
- コントローラーメソッドには、
- デフォルトコントローラー(デフォルトでは
Home
)とデフォルトメソッド(デフォルトではindex
)はURIに省略する必要があります。 コントローラーメソッドとURIの1対1対応を制限します。
例:デフォルトでは
/
にアクセスできますが、/home
と/home/index
は404になります。
- デフォルトコントローラー(デフォルトでは
- メソッドパラメーター数をチェックします。
URIのパラメーターがメソッドパラメーターよりも多い場合、404になります。
_remap()
メソッドはサポートされていません。コントローラーメソッドとURIの1対1対応を制限します。
- 定義済みルート内のコントローラーにアクセスできません。
**自動ルート**経由でアクセス可能なコントローラーと**定義済みルート**経由でアクセス可能なコントローラーを完全に分離します。
詳細は自動ルーティング(改良版)を参照してください。
データベース
- データベースに新しいOCI8ドライバを追加しました。
Oracleデータベースにアクセスでき、SQLとPL/SQLステートメントをサポートします。
- Raw SQL文字列のサポート
Raw SQL文字列を表す
CodeIgniter\Database\RawSql
クラスを追加しました。select()、where()、like()、join()は、
CodeIgniter\Database\RawSql
インスタンスを受け入れます。DBForge::addField()
のデフォルト値Raw SQL文字列のサポート。デフォルト値としてのRaw SQL文字列を参照してください。
SQLite3に、外部キー制約を有効にする新しい設定項目
foreignKeys
が追加されました。
ヘルパーと関数
HTMLヘルパー
script_tag()
は、ブール属性を最小限の形式で記述するためにnull
値を使用するようになりました:<script src="..." defer />
。script_tag()
のサンプルコードを参照してください。get_filenames()
に4番目のパラメーター$includeDir
を追加しました。get_filenames()
を参照してください。log_message()
を介してログに記録された例外情報は改善されました。例外が発生したファイルと行が含まれるようになりました。また、メッセージは切り捨てられなくなりました。ログ形式も変更されました。アプリケーションでログ形式に依存しているユーザーの場合、新しいログ形式は「<1ベースのカウント> <クリーンアップされたファイルパス>(<行>):<クラス><関数><引数>」です。
コマンド
spark db:table
コマンドを追加しました。詳細はデータベースコマンドを参照してください。- 現在接続しているデータベース内のすべてのテーブルの名前をターミナルに表示できるようになりました。
spark db:table --show
- または、テーブルのフィールド名とレコードを表示できます。
spark db:table my_table
spark db:table my_table --limit-rows 50 --limit-field-value 20 --desc
- または、列の種類、テーブルの最大長などのメタデータを表示できます。
spark db:table my_table --metadata
spark routes
コマンドは、クロージャルート、自動ルート、およびフィルターを表示するようになりました。URIルーティングを参照してください。
その他
コントローラーに
$this->validateData()
を追加しました。$this->validateData()を参照してください。- コンテンツセキュリティポリシー(CSP)の機能強化
CSPプレースホルダー(
{csp-script-nonce}
と{csp-style-nonce}
)をカスタマイズするために、Config\ContentSecurityPolicy
に設定$scriptNonceTag
と$styleNonceTag
を追加しました。CSPプレースホルダーの置換を無効にするために、
Config\ContentSecurityPolicy
に設定$autoNonce
を追加しました。nonce属性を取得するための関数
csp_script_nonce()
とcsp_style_nonce()
を追加しました。詳細はコンテンツセキュリティポリシーを参照してください。
新しいビューデコレーターにより、キャッシュする前に生成されたHTMLを変更できます。
厳格なバリデーションルールを追加しました。従来のルールと厳格なルールを参照してください。
app/Config/Mimes.phpにwebpファイルのサポートを追加しました。
RouteCollection::addRedirect()
は、プレースホルダーを使用できるようになりました。詳細はリダイレクトルートを参照してください。- デバッグバーの機能強化
デバッグツールバーは、
time()
の代わりにmicrotime()
を使用するようになりました。
プリロードのサンプルファイル(preload.php)を追加しました。
変更点
最小PHP要件を7.4に更新。
デフォルトの設定をより安全にするために、自動ルーティングはデフォルトで無効に変更されました。
バリデーション。ワイルドカード(*)を使用するフィールドを使用する場合のエラーの生成を変更しました。エラーキーには、完全なパスが含まれるようになりました。すべてのエラーの取得を参照してください。
ワイルドカードを使用する場合、
Validation::getError()
は、マスクに一致するすべての検出されたエラーを文字列として返します。現在のバージョンのコンテンツセキュリティポリシー(CSP)は、スクリプトタグに1つのnonce、スタイルタグに1つのnonceを出力します。以前のバージョンでは、各タグに1つのnonceを出力していました。
Cookieの送信プロセスは、
Response
クラスに移動されました。Session
クラスはCookieを送信せず、Responseに設定します。
非推奨
CodeIgniter\Database\SQLSRV\Connection::getError()
は非推奨になりました。代わりにCodeIgniter\Database\SQLSRV\Connection::error()
を使用してください。CodeIgniter\Debug\Exceptions::cleanPath()
とCodeIgniter\Debug\Toolbar\Collectors\BaseCollector::cleanPath()
は非推奨になりました。代わりにclean_path()
関数を使用してください。CodeIgniter\Log\Logger::cleanFilenames()
とCodeIgniter\Test\TestLogger::cleanup()
はどちらも非推奨になりました。代わりにclean_path()
関数を使用してください。CodeIgniter\Router\Router::setDefaultController()
は非推奨になりました。spark内の定数
SPARKED
は非推奨となりました。CodeIgniter\CodeIgniter
の$context
プロパティを使用してください。CodeIgniter\Autoloader\Autoloader::discoverComposerNamespaces()
は非推奨となり、使用されなくなりました。定数
EVENT_PRIORITY_LOW
、EVENT_PRIORITY_NORMAL
、EVENT_PRIORITY_HIGH
は非推奨となりました。クラス定数CodeIgniter\Events\Events::PRIORITY_LOW
、CodeIgniter\Events\Events::PRIORITY_NORMAL
、CodeIgniter\Events\Events::PRIORITY_HIGH
を使用してください。
修正されたバグ
SQLSRVドライバは、設定からのポート値を無視します。
修正されたバグの完全なリストについては、リポジトリのCHANGELOG_4.2.mdを参照してください。