4.2 移行ガイド
CakePHP 4.2 は 4.0 からのAPI互換アップグレードです。 このページでは、4.2で追加された非推奨事項と機能の概要を説明します。
4.2.0へのアップグレード
CakePHP 4.2.0にアップグレードするには、次の Composer コマンドを実行してください。:
php composer.phar require --update-with-dependencies "cakephp/cakephp:4.2.x"
非推奨
4.2では、いくつかの非推奨機能が導入されています。 これらの機能はすべて 4.x の間は継続されますが、5.0 で削除されます。 非推奨機能の更新を自動化するには、`upgrade tool <upgrade-tool-use>` を使用します。:
bin/cake upgrade rector --rules cakephp42 <path/to/app/src>NOTE
これはCakePHP 4.2の変更点のみを更新します。CakePHP 4.1の変更を最初に適用していることを確認してください。
パスごとに非推奨を無効にするための新しい設定オプションが追加されました。 詳細は deprecation-warnings を参照してください。
Core
Exception::responseHeader()は非推奨になりました。 HTTP のレスポンスヘッダを設定するにはHttpException::setHeaders()を使用しなければなりません。 レスポンスヘッダを設定するアプリケーションやプラグインの例外はHttpExceptionのサブクラスに更新する必要があります。Cake\Core\Exception\ExceptionはCake\Core\Exception\CakeExceptionに名前が変更されました。
Database
Cake\Database\ExceptionはCake\Database\Exception\DatabaseExceptionに名前が変更されました。
ORM
TableLocator::allowFallbackClass()が追加されました。 このメソッドは、自動的に生成されるフォールバックテーブルクラスを無効にします。 現在は無効にすることがオプトインされていますが、将来的にはデフォルトになります。ORM\Behavior::getTable()は非推奨になりました。 代わりに、table()を使用してください。 この変更により、ORM\Table間でメソッドの戻り値が異なるようになったため、メソッド名も異なるものになりました。
Behaviorの変更
以下の変更はどのメソッドのシグネチャも変更しませんが、メソッドのセマンティクスや動作を変更します。
Collection
Collection::groupBy()とCollection::indexBy()は、パスが存在しない場合や パスに NULL 値が含まれている場合に例外をスローするようになりました。 null をサポートする必要がある場合は、コールバックを使用してデフォルト値を返すようにしました。
Controller
Controller::$componentsは protected になりました。 以前は protected として文書化されていました。 これは、実装で可視性を public に変更できるため、ほとんどのアプリケーションコードに影響を与えることはないはずです。
Component
FlashComponent::set()をExceptionインスタンスと一緒に使用する場合、 デフォルトでelementオプションをerrorに設定するようになりました。
Database
TimeTypeはH:i形式の値を正しくマーシャルするようになりました。 ※以前は、これらの値はバリデーション実行後にnullにキャストされていました。
Error
例外コードは
HttpExceptionの HTTP ステータスコードとしてのみ使用されるようになりました。 その他の例外で 500 以外の値を返すHTTPコードはExceptionRenderer::$exceptionHttpCodesによって制御されます。NOTE
例外が更新されるまで以前の動作に戻す必要がある場合は、 カスタムの ExceptionRenderer を作成して
getHttpCode()関数をオーバーライドすることができます。 詳細は custom-exceptionrenderer を参照してください。ConsoleErrorHandlerは例外コードをConsoleExceptionの終了コードとしてのみ使用するようになりました。
Validation
Validation::time()は、分がない場合に文字列を拒否するようになりました。 ※以前は時間のみの数字を受け付けていましたが、APIのドキュメントでは分が必要だと示されていました。
破壊的変更
API の背後に、対応が必要ないくつかの破壊的変更があります。 これらの変更は通常、テストにのみ影響します。
I18n
- Aura.Intl パッケージへの依存性は、もはやメンテナンスされていないため削除されました。 アプリ/プラグインが custom translation loaders を持っている場合、
Aura\Intl\Packageの代わりにCake\I18n\Packageのインスタンスを返す必要があります。
テスト
- UUID 周辺のフィクスチャ名が統合されました (
UuidItemsFixture,BinaryUuidItemsFixture)。 これらの名前を使用している場合は、必ず更新してください。UuidportfoliosFixtureは core では使われていませんでしたが、現在は削除されています。
新機能
私たちは、機能を出荷できるようにするために、新しいプロセスを追加し、 コミュニティからのフィードバックを集めて それらの機能を進化させていきます。 私たちはこの仕組みを experimental-features と呼んでいます。
Core
- コンテナ 依存性の注入(DI) の実験的サポートが追加されました。
Console
ConsoleIo::comment()が追加されました。 このメソッドは、生成されたヘルプテキストのコメントのように、テキストを青く整形します。TableHelperは<text-right>書式タグをサポートするようになりました。 これは、セルの内容を(左ではなく)右端に揃えます。
Database
SqlServerはデフォルトでクライアント側のバッファリングされたカーソルを準備された文のために作成するようになりました。 これは、サーバー側の SCROLL カーソルのパフォーマンスの問題を修正するために変更されました。 ほとんどの結果セットでパフォーマンスが向上されることを確認してください。WARNING
クエリ結果が大きいユーザの場合、
Query::disableBufferedResults()が呼ばれないと クライアント側のバッファの割り当てにエラーが発生する可能性があります。 最大バッファサイズはphp.iniでpdo_sqlsrv.client_buffer_max_kb_sizeで設定できます。 詳細は https://docs.microsoft.com/ja-jp/sql/connect/php/cursor-types-pdo-sqlsrv-driver?view=sql-server-ver15#pdo_sqlsrv-and-client-side-cursors を参照してください。現在の結果キャスティングモードを取得するために
Query::isResultsCastingEnabled()が追加されました。照合( collation )に文字列リテラルを使えるように、
StringExpressionが追加されました。IdentifierExpressionが照合( collation )をサポートするようになりました。
Http
Cake\Http\Middleware\SessionCsrfProtectionMiddlewareが追加されました。 このミドルウェアは、CSRFトークンをクッキーではなく、セッションに格納します。 これにより、CSRFトークンはセッションに合わせてユーザスコープ化され、時間ベースのものとなり、 クッキーベースのCSRFトークンよりもセキュリティが強化されます。 このミドルウェアはCsrfProtectionMiddlewareの代替品です。hal+json,hal+xml,jsonldがResponseに追加され、withType()で使用できるようになりました。Client::createFromUrl()を追加しました。このメソッドを使うと、 ベースパスを含む特定のドメインにスコープされたHTTPクライアントを作成することができます。- 新しいユーティリティクラス
CakeHttp\FlashMessageが追加され、 そのインスタンスはServerRequest::getFlash()を通して利用できるようになりました。FlashComponentに似たクラスで、フラッシュメッセージを設定することができます。 特にミドルウェアからのフラッシュメッセージを設定するのに便利です。
ORM
Table::subquery()とQuery::subquery()が追加されました。 これらのメソッドを使うと、自動エイリアスを持たないクエリオブジェクトを作成することができます。 これにより、サブクエリや一般的なテーブル式を作成する際のオーバーヘッドや複雑さを軽減することができます。- 3.xで利用可能だった
IsUniqueルールはallowMultipleNullsオプションを受け入れるようになりました。 3.x とは異なり、デフォルトでは無効になっています。
TestSuite
EmailTrait::assertMailSubjectContains()とassertMailSubjectContainsAt()が追加されました。mockService()にConsoleIntegrationTestTraitとIntegrationTestCaseTraitが追加されました。 このメソッドは 依存性の注入(DI) コンテナに注入されたサービスを モックオブジェクトやスタブオブジェクトに置き換えることを可能にします。
View
- コンテキストクラスは
attributes()の結果にcomment,null,defaultのメタデータオプションを含めるようになりました。 ViewBuilder::addHelper()は、ヘルパーのコンストラクタにオプションを渡すための$optionsパラメータを受け付けるようになりました。- オプション
assetUrlClassNameが UrlHelper`` に追加されました。 このオプションを使うと、デフォルトのアセットの URL リゾルバをアプリケーション固有のものに置き換えることができます。 これは、アセットキャッシュバストのパラメータをカスタマイズする必要がある場合に便利です。