5.2 移行ガイド
5.2.0 リリースは 5.0 と後方互換性があります。 新機能が追加され、新たな非推奨機能が導入されます。 5.x で非推奨とされた機能は 6.0.0 で削除されます。
動作の変更
ValidationSet::add()は、すでに定義されている名前でルールが追加された場合にエラーを発生させるようになりました。 この変更は、ルールが誤って上書きされるのを防ぐことを目的としています。Http\Sessionは、無効なセッション・プリセットが使用された場合に例外を発生させるようになりました。FormProtectionComponentは、Cake\Controller\Exception\FormProtectionExceptionを発生させるようになりました。 このクラスはBadRequestExceptionのサブクラスであり、ログからフィルタリングできる利点があります。NumericPaginator::paginate()は、SelectQueryインスタンスが渡された場合でもfinderオプションを使用するようになりました。
非推奨
Console
Arguments::getMultipleOption()は非推奨になりました。代わりにgetArrayOption()を使用してください。
Datasource
EntityInterfaceインスタンスを文字列にキャストする機能は非推奨となりました。 代わりにエンティティをjson_encode()してください。EntityInterface::set()を使って複数のエンティティフィールドを一括代入することは非推奨となりました。 代わりにEntityInterface::patch()を使用してください。例えば、$entity->set(['field1' => 'value1', 'field2' => 'value2'])のような使い方は$entity->patch(['field1' => 'value1', 'field2' => 'value2'])に変更してください。
Event
- イベントリスナーやコールバックから値を返すことは非推奨となりました。代わりに
$event->setResult()を使用してください。 また、イベントの伝播を停止したい場合は$event->stopPropogation()を使用してください。
View
FormHelperのerrorClassオプションは非推奨となり、テンプレート文字列の使用が推奨されます。 アップグレードするには、errorClassの定義をテンプレートセットに移動してください。 詳細は Customizing Templates を参照してください。
新機能
Console
cake counter_cacheコマンドが追加されました。このコマンドはCounterCacheBehaviorを使用しているモデルのカウンターを再生成するために使用できます。ConsoleIntegrationTestTrait::debugOutput()により、コンソールコマンドの統合テストのデバッグが容易になりました。ConsoleInputArgumentはseparatorオプションをサポートするようになりました。 このオプションにより、位置引数を,などの文字列で区切ることができ、 CakePHP は引数を配列として分割して処理します。Arguments::getArrayArgumentAt()およびArguments::getArrayArgument()が追加されました。 これらのメソッドにより、区切り文字separatorで区切られた位置引数を配列として取得できます。ConsoleInputOptionはseparatorオプションをサポートするようになりました。 このオプションにより、オプション値を,などの文字列で区切ることができ、 CakePHP は引数を配列として分割して処理します。Arguments::getArrayArgumentAt()、Arguments::getArrayArgument()、およびArguments::getArrayOption()が追加されました。これらのメソッドにより、 区切り文字separatorで区切られた位置引数やオプションを配列として取得できます。
Database
nativeuuid型が追加されました。この型により、MariaDB を使用した Mysql 接続でuuidカラムを利用できるようになりました。他のすべてのドライバーでは、nativeuuidはuuidのエイリアスです。Cake\Database\Type\JsonType::setDecodingOptions()が追加されました。このメソッドにより、json_decode()の$flags引数の値を設定できます。CounterCacheBehavior::updateCounterCache()が追加されました。このメソッドにより、設定された関連付けのすべてのレコードのカウンターキャッシュ値を更新できます。 同様の処理をコンソールから実行するCounterCacheCommandも追加されました。Cake\Database\Driver::quote()が追加されました。このメソッドは、プリペアドステートメントが使用できない場合に、SQL クエリで使用する値をクォートする方法を提供します。
Datasource
- アプリケーションルールで
Closureを使用してバリデーションメッセージを定義できるようになりました。 これにより、エンティティの状態やバリデーションルールのオプションに基づいて動的なバリデーションメッセージを作成できます。
Error
- カスタム例外に対して、
ErrorControllerで特定のエラーハンドリングロジックを定義できるようになりました。
ORM
CounterCacheBehavior::updateCounterCache()が追加されました。このメソッドにより、設定された関連付けのすべてのレコードのカウンターキャッシュ値を更新できます。BelongsToMany::setJunctionProperty()およびgetJunctionProperty()が追加されました。 これらのメソッドにより、中間テーブルのレコードをハイドレートする際に使用される_joinDataプロパティをカスタマイズできます。Table::findOrCreate()は、第2引数に配列を直接渡してデータを指定できるようになりました。
TestSuite
TestFixture::$strictFieldsプロパティが追加されました。このプロパティを有効にすると、フィクスチャーのレコードリストにスキーマに存在しないフィールドが含まれている場合にエラーが発生します。
View
FormHelper::deleteLink()が追加されました。これは、テンプレート内でDELETEメソッドを使用した削除リンクを簡単に作成できるラッパーです。HtmlHelper::importmap()が追加されました。このメソッドにより、JavaScript ファイルのインポートマップを定義できます。FormHelperは、フォームコントロールの div にクラスを適用するためにcontainerClassテンプレートを使用するようになりました。デフォルト値はinputです。