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