5.1 移行ガイド
5.1.0 リリースは 5.0 と後方互換性があります。 新機能が追加され、新たな非推奨機能が導入されます。 5.x で非推奨とされた機能は 6.0.0 で削除されます。
動作の変更
- Connectionは、設定に
readまたはwriteキーが存在する場合、その値に関係なく一意の読み取りおよび書き込みドライバーを作成するようになりました。 - FormHelper は、
required属性が設定されている入力要素に対してaria-required属性を生成しなくなりました。 これらの要素ではaria-required属性は冗長であり、HTML のバリデーション警告を引き起こします。 スタイリングやスクリプトでaria-required属性を使用している場合は、アプリケーションを更新する必要があります。 - 重複した名前でアソシエーションを追加しようとすると例外が発生するようになりました。 必要に応じて
$table->associations()->has()を使って条件付きでアソシエーションを定義できます。 - テキストユーティリティおよび TextHelper の省略や最大長に関するメソッドは、
...の代わりに UTF-8 文字のellipsisを使用するようになりました。 TableSchema::setColumnType()は、指定したカラムが存在しない場合に例外をスローするようになりました。PluginCollection::addPlugin()は、同じ名前のプラグインがすでに追加されている場合に例外をスローするようになりました。TestCase::loadPlugins()は、以前にロードされたプラグインをすべてクリアするようになりました。 そのため、以降のテストで必要なすべてのプラグインを指定する必要があります。groupsを使用するCache設定用のハッシュアルゴリズムが変更されました。 すべてのキーに対して新しいグループプレフィックスのハッシュが生成されるため、キャッシュミスが発生します。 完全にコールドキャッシュとなるのを避けるため、段階的なデプロイを検討してください。FormHelper::getFormProtector()は、従来の型に加えてnullを返すようになりました。 これにより動的なビューコードがエラーになりにくくなりますが、ほとんどのアプリケーションには影響しません。Table::findList()のvalueSeparatorのデフォルト値が;から半角スペースに変更されました。ErrorLoggerはPsr\Log\LogTraitを使用するようになりました。Database\QueryCompiler::$_orderedUnionは削除されました。
非推奨
I18n
_cake_core_キャッシュ設定キーは_cake_translations_に変更されました。
Mailer
Mailer::setMessage()は非推奨となりました。このメソッドは直感的でない動作をし、利用頻度も非常に低いためです。
新機能
Cache
RedisEngineで Redis への TLS 接続を有効にするtlsオプションがサポートされるようになりました。。ssl_ca、ssl_cert、ssl_keyオプションを使用して Redis 用の TLS コンテキストを定義できます。
Command
bin/cake plugin listが追加され、利用可能なすべてのプラグイン、そのロード設定、およびバージョンを一覧表示できるようになりました。- オプションの
Command引数にdefault値を指定できるようになりました。 BannerHelperが追加されました。このコマンドヘルパーは、テキストをカラフルな背景と余白付きのバナーとして整形できます。ConsoleOutputにinfo.bg、warning.bg、error.bg、success.bgのデフォルトスタイルが追加されました。
Console
Arguments::getBooleanOption()およびArguments::getMultipleOption()が追加されました。Arguments::getArgument()は、未知の引数名が指定された場合に例外をスローするようになりました。 これにより、オプション名と引数名の混同を防ぐことができます。
Controller
- コンポーネントでも、コントローラやコマンドと同様に、DIコンテナを使用して依存関係を解決し、コンストラクタの引数として受け取れるようになりました。
Core
PluginConfigが追加されました。このクラスを使用すると、利用可能なすべてのプラグイン、そのロード設定、およびバージョンを取得できます。toString、toInt、toBool関数が追加されました。これらの関数は、リクエストデータや他の入力値を型安全にキャストし、変換に失敗した場合はnullを返します。pathCombine()が追加され、重複や末尾のスラッシュを気にせずパスを組み立てられるようになりました。BaseApplicationおよびBasePluginクラスに新しいeventsフックが追加されました。 このフックは、アプリケーションのグルーバルイベントリスナーを登録する推奨方法です。詳しくは Registering Listeners を参照してください。
Database
point、linestring、polygon、geometry型のサポートが追加されました。 これらの型は地理空間やデカルト座標を扱う際に便利です。SQLite のサポートは内部的にテキストカラムを使用しており、 データを地理空間値として操作するための関数はありません。SelectQuery::__debugInfo()に、クエリがどのコネクションロール用のものかが含まれるようになりました。SelectQuery::intersect()およびSelectQuery::intersectAll()が追加されました。 これらのメソッドにより、INTERSECTおよびINTERSECT ALL結合を使用したクエリを記述できるようになりました。intersect、intersect-all、およびset-operations-order-by機能がサポートされるようになりました。- 4.x に存在したバッファリングなしでレコードを取得する機能が復活しました。
SelectQuery::enableBufferedResults()、` SelectQuery::disableBufferedResults()、 SelectQuery::isBufferedResultsEnabled()` メソッドが再追加されました。
Datasource
RulesChecker::remove()、removeCreate()、removeUpdate()、およびremoveDelete()メソッドが追加されました。これらのメソッドにより、ルールを名前で削除できるようになりました。
Http
SecurityHeadersMiddleware::setPermissionsPolicy()が追加されました。このメソッドにより、permissions-policyヘッダー値を定義できるようになりました。Clientはリクエスト送信時にHttpClient.beforeSendおよびHttpClient.afterSendイベントを発火するようになりました。 これらのイベントを利用して、ログ記録、キャッシュ、テレメトリ収集などを行うことができます。Http\Server::terminate()が追加されました。 このメソッドはServer.terminateイベントを発火し、fastcgi 環境ではレスポンス送信後にロジックを実行できます。 その他の環境ではServer.terminateイベントはレスポンス送信 前 に実行されます。
I18n
Number::formatter()およびcurrency()は、丸め方法を上書きするroundingModeオプションを受け付けるようになりました。toDateおよびtoDateTime関数が追加されました。これらの関数は、リクエストデータや他の入力値を型安全にキャストし、変換に失敗した場合はnullを返します。
ORM
- アソシエーションのファインダークエリで
preserveKeysオプションを設定できるようになりました。 これにより、formatResults()と組み合わせて、アソシエーションのファインダー結果を連想配列として返すことができます。 - 名前に
jsonを含む SQLite カラムをJsonTypeにマッピングできるようになりました。 この機能は現時点ではオプトインであり、アプリでORM.mapJsonTypeForSqlite設定値をtrueにすることで有効になります。
TestSuite
- CakePHP およびアプリのテンプレートは PHPUnit
^10.5.5 || ^11.1.3"を使用するように更新されました。 ConnectionHelperのメソッドがすべて static になりました。このクラスは状態を持たず、メソッドが static に更新されました。LogTestTraitが追加されました。この新しいトレイトにより、テスト内でログを簡単にキャプチャし、ログメッセージの有無をアサートできるようになりました。IntegrationTestTrait::replaceRequest()が追加されました。
Utility
Hash::insert()およびHash::remove()は、arrayデータに加えてArrayAccessオブジェクトも受け付けるようになりました。
Validation
Validation::enum()およびValidator::enum()が追加されました。これらのバリデーションメソッドにより、Backed Enum 値の検証が簡単になりました。Validation::enumOnly()およびValidation::enumExcept()が追加されました。これらのメソッドにより、特定のケースの検証や、Backed Enum 値のバリデーションをさらに簡単に行うことができます。
View
- View cells は、アクションの前後で
Cell.beforeActionおよびCell.afterActionイベントを発火するようになりました。 NumberHelper::format()は、丸め方法を上書きするroundingModeオプションを受け付けるようになりました。
Helpers
TextHelper::autoLinkUrls()に、リンクラベルの表示を改善するためのオプションが追加されました:stripProtocol: リンク先の先頭からhttp://やhttps://を取り除きます。デフォルトは無効です。maxLength: リンクラベルの最大長を指定します。デフォルトは無効です。ellipsis: リンクラベルの末尾に付加する文字列です。デフォルトはUTF8バージョンです。
HtmlHelper::meta()でmeta('csrfToken')を使うことで、現在の CSRF トークンを含む meta タグを生成できるようになりました。