4.4 移行ガイド
CakePHP 4.4 は 4.0 からのAPI互換アップグレードです。 このページでは、4.4で追加された非推奨事項と機能の概要を説明します。
4.4.0へのアップグレード
CakePHP 4.4.0にアップグレードするには、次の Composer コマンドを実行してください。:
php composer.phar require --update-with-dependencies "cakephp/cakephp:^4.4"
NOTE
CakePHP 4.4を動作させるには、PHP 7.4以上が必要です。
非推奨
4.4では、いくつかの非推奨機能が導入されています。 これらの機能はすべて 4.x の間は継続されますが、5.0 で削除されます。
Controller
Controller::paginate()のpaginatorオプションは非推奨です。 代わりに、classNameを使用してください。PaginatorComponentのpaginatorオプションは非推奨です。 代わりに、classNameを使用してください。
Datasource
FactoryLocator::add()はもはやクロージャ・ファクトリ関数を受け付けません。 代わりにLocatorInterfaceのインスタンスを渡さなければなりません。Cake\Datasource\Paging\PaginatorはCake\Datasource\Paging\NumericPaginatorに名称変更されました。
ErrorHandler & ConsoleErrorHandler
ErrorHandler と ConsoleErrorHandler クラスは、非推奨となりました。 これらのクラスは、新しい ExceptionTrap と ErrorTrap クラスに置き換わりました。 トラップクラスは、より拡張可能で一貫性のあるエラーおよび例外処理フレームワークを提供します。 新しいシステムにアップグレードするためには、(例えば config/bootstrap.php 中の) ErrorHandler と ConsoleErrorHandler の使い方を以下のように置き換えることができます。:
use Cake\Error\ErrorTrap;
use Cake\Error\ExceptionTrap;
(new ErrorTrap(Configure::read('Error')))->register();
(new ExceptionTrap(Configure::read('Error')))->register();より詳細なドキュメントについては、 エラーと例外の処理 を参照してください。 さらに、非推奨のエラー処理システムに関連する以下のメソッドも非推奨となります。:
Debugger::outputError()Debugger::getOutputFormat()Debugger::setOutputFormat()Debugger::addFormat()Debugger::addRenderer()ErrorLoggerInterface::log()。 代わりにlogException()を実装してください。ErrorLoggerInterface::logMessage()。 代わりにlogError()を実装してください。
RequestHandlerComponent
RequestHandlerComponent はゆるやかに非推奨になりました。 AuthComponent のように RequestHandler を使用しても、ランタイム非推奨にはなりませんが、 5.0では削除される 予定 です。
accepts()を$this->request->accepts()に置き換えてください。requestedWith()をカスタムリクエスト検出器に置き換えてください。 (例えば、$this->request->is('json')など)prefers()をContentTypeNegotiationに置き換えてください。 Controller Viewclasses を参照してください。renderAs()をControllerのコントローラコンテンツネゴシエーション機能に置き換えてください。checkHttpCacheオプションを HTTPキャッシュの確認 に置き換えてください。RequestHandlerComponentでビュークラスマッピングを定義する代わりに、 Controller Viewclasses を使用してください。
PaginatorComponent
PaginatorComponent は非推奨で、5.0で削除される予定です。 必要なページング設定を行うには、 Controller::$paginate プロパティ、 または Controller::paginate() メソッドの $settings パラメータを使用します。
ORM
SaveOptionsBuilderは非推奨となりました。代わりにオプション配列を使用してください。
プラグイン
- プラグインクラス名は、プラグイン名に "Plugin" サフィックスを付加したものと一致するようになりました。 例えば、"ADmad/I18n" のプラグインクラスは、
ADmad\I18n\Pluginではなく、ADmad\I18n\I18nPluginとなります。CakePHP 4.3以降のときと同様です。 後方互換性のため、旧スタイルの名前も引き続きサポートされます。
TestSuite
ConsoleIntegrationTestTraitは、 cakephp/cakephp パッケージ全体を必要とせずにコンソールアプリケーションをテストできるように、 依存関係とともに console パッケージに移動されました。Cake\TestSuite\ConsoleIntegrationTestTraitはCake\Console\TestSuite\ConsoleIntegrationTestTraitに移動しました。Cake\TestSuite\Constraint\Console\*はCake\Console\TestSuite\Constraint\*に移動しました。Cake\TestSuite\Stub\ConsoleInputはCake\Console\TestSuite\StubConsoleInputに移動しました。Cake\TestSuite\Stub\ConsoleOutputはCake\Console\TestSuite\StubConsoleOutputに移動しました。Cake\TestSuite\Stub\MissingConsoleInputExceptionはCake\Console\TestSuite\MissingConsoleInputExceptionに移動しました。
ContainerStubTraitは、 cakephp/cakephp パッケージ全体を必要とせずにコンソールアプリケーションをテストできるように、 core パッケージに移動されました。Cake\TestSuite\ContainerStubTraitはCake\Core\TestSuite\ContainerStubTraitに移動しました。
HttpClientTraitは、 cakephp/cakephp パッケージ全体を必要とせずにhttpアプリケーションをテストできるように、 http パッケージに移動されました。Cake\TestSuite\HttpClientTraitはCake\Http\TestSuite\HttpClientTraitに移動しました。
Behaviorの変更
以下の変更は、どのメソッドのシグネチャも変更しませんが、 メソッドのセマンティクスや動作は変更します。
ORM
Table::saveMany()は、まだ 'dirty' で、オリジナルのフィールド値を含むエンティティでModel.afterSaveCommitイベントをトリガーするようになりました。 これはModel.afterSaveCommitのイベントペイロードをTable::save()と一致させるためのものです。
Routing
Router::parseRequest()は、クライアントが無効な HTTP メソッドを使用した場合に、InvalidArgumentExceptionの代わりにBadRequestExceptionを発生させるようになりました。
新機能
Cache
RedisEngineはdeleteAsync()とclearBlocking()メソッドをサポートするようになりました。 これらのメソッドは、Redis のUNLINKオペレーションを使用して、 後で Redis が削除できるようにデータをマークします。
Command
bin/cake routesは、ルートテンプレート内の衝突をハイライトするようになりました。Command::getDescription()では、カスタムの説明文を設定することができます。Console Command Description を参照してください。
Controller
Controller::viewClasses()が追加されました。 このメソッドは、コンテントタイプネゴシエーションを行う必要があるコントローラで実装する必要があります。 ビュークラスは、content-type ネゴシエーションに参加するために、 静的メソッドcontentType()を実装する必要があります。
Database
SQLiteドライバが PHP8.1+ でメモリ内共有データベースをサポートするようになりました。Query::newExpr()の代わりにQuery::expr()が追加されました。QueryExpression::case()ビルダーは、CakeDatabaseTypedResultInterfaceを実装したthen()とelse()に渡す式からの型推定をサポートするようになりました。
Error
ErrorTrapとExceptionTrapが追加されました。 これらのクラスは、アプリケーションのための最新のエラー処理システムの基礎を形成しています。 詳しくは エラーと例外の処理 をご覧ください。
Http
BaseApplication::handle()は、$requestを 常にサービスコンテナに追加するようになりました。HttpsEnforcerMiddlewareにhstsオプションが追加され、Strict-Transport-Securityヘッダーを設定することができるようになりました。
Mailer
MailerがautoLayout設定を受け付けるようになり、falseを設定することでViewBuilderでの自動レイアウトを無効にできるようになりました。
ORM
TreeBehaviorにcascadeCallbacksオプションが追加されました。 このオプションを有効にすると、TreeBehaviorはfind()の結果をイテレートして、個別にレコードを削除するようになります。 これにより、ツリーノードを削除する際に ORM コールバックを使用することができるようになります。
Routing
RoutingMiddlewareは、マッチしたRouteインスタンスに "route" リクエスト属性を 設定するようになりました。
View
View::contentType()が追加されました。 ビューは、content-typeネゴシエーションに参加するために、このメソッドを実装する必要があります。View::TYPE_MATCH_ALLが追加されました。 この特別なcontent-typeにより、content-typeネゴシエーションがマッチしない場合のフォールバックビューを構築することができます。