元記事はこちら。
PHP 5.5 以上で動作
CakePHP 3.2 は PHP 5.5.10 以上で動作します。PHP 5.5対応により、より良い Date や Time ライブラリを提供し、パスワードの互換ライブラリの依存関係を削除できます。
非推奨についての警告の無効化
アップグレードの際、幾つもの非推奨の警告が出ます。これらの警告はCakePHP4.xで削除されるメソッドやオプションや機能から出力されますが、3.x系のあいだは出力され続けます。遭遇するすべての非推奨の警告を特定し解消することをおすすめしますが、それはいつでも可能とは限りません。非推奨についての通知の修正を延期したい場合、config/app.phpで無効にできます。
'Error' => [
'errorLevel' => E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED,
]
上述のエラーレベルでは、CakePHPの非推奨の警告を抑制できます。
Carbon ライブラリを Chronos に置き換え
Carbon ライブラリは cakephp/chronos に置き換えられました。この新しいライブラリは Carbon のフォークで、依存関係は追加されていません。カレンダーのdateオブジェクト、変更不可のdateオブジェクトとdatetimeオブジェクトを提供します。
新しい Date オブジェクト
Date クラスは DATE 型のカラムをPHPオブジェクトに適用するものです。Dateインスタンスは常にその時刻を 00:00:00 UTC に修正します。デフォルトでは ORM は DATE 型の列をマッピングするときに Date オブジェクトのインスタンスを作成します。
新しい変更不可の Date と Time オブジェクト
FrozenTime と FrozenDate クラスが追加されました。これらのクラスは Time オブジェクトが持つものと同じAPIを提供します。これらのフローズンクラスは変更不可の日付と時刻を提供します。これらの変更不可オブジェクトの利用により、意図しない変更を防ぐことができます。その場で修正する代わりに、修正メソッドは new インスタンスを再実行します。
use Cake\I18n\FrozenTime;
$time = new FrozenTime('2016-01-01 12:23:32');
$newTime = $time->modify('+1 day');
上記のコードでは $time と $newTime は別のオブジェクトです。$time オブジェクトはオリジナルの値を保持していますが、$newTime は修正後の値を保持しています。3.2では、ORM は date/datetime 型の列を変更不可オブジェクトに割り当てます。
CorsBuilder の追加
クロスオリジンリソースシェアリング (CORS) に関連してヘッダの設定を簡単にするために、新しく CorsBuilder が追加されました。このクラスはCORS関連のヘッダを流れるようなインターフェースで定義できます。
ORM の改善
- 同じアソシエーションをいくつも含んでいる場合、期待通りの動作をするようになり、クエリービルダーの機能はスタックされるようになった
- ファンクションの表現が結果を正しくキャストするようになった。これは $query->func()->current_date() のような表現が datetime インスタンスを返すことを意味する
Validator API の改善
Validator オブジェクトに新しいメソッドがいくつも追加され、バリデータの生成が冗長でなくなった。たとえば、ユーザー名のフィールドに対するバリデーションは以下のようになります:
$validator->email('username')
->ascii('username')
->lengthBetween('username', [4, 8]);
Console の改善
- Shell::info(), Shell::warn() と Shell::success() が追加された。これらのヘルパーメソッドにより、一般によく使用される書式を簡潔に使用できるようになった
- Cake\Console\Exception\StopException の追加
- Shell::abort() が追加され、error()と置き換えられた
StopException の追加
Shell::_stop() と Shell::error() はもはや exit()を呼びださなくなった。代わりにCake\Console\Exception\StopExceptionが発生する。シェルやタスクが呼び出された場所で \Exception を捕捉した場合、そのcatchブロックはアップデートしないと StopException を捕捉できなくなる。 exit()を呼び出さないことでテストシェルは簡単に、また少しのモックのみでよくなる。
ヘルパーの initialize()
ヘルパーは他のクラスタイプと同じように initialize(array $config) を実装できるようになった
FormHelper
FormHelper::create() の action キーは非推奨になった。urlを直接使用するべき。
Fatal Error Memory Limit Handling
新しい設定オプション Error.extraFatalErrorMemory により致命的なエラーが発生した場合のメモリの上限を数メガバイト増加させることができる。これによりログ出力を完了させたりエラーハンドリングするだけの余裕ができる
非推奨
CakePHP を改善するにつれて、より良い解決策に置き換えられて非推奨になる機能があります。非推奨の機能は4.0まで削除されません。
- Shell::error() が非推奨になった。その名称がメッセージを出力して実行を停止するという両方を明確に示していないため。代わりに Shell::abort() を使用できる
- Cake\Database\Expression\QueryExpression::type() は非推奨になった。代わりに tieWith() を使用できる
- Cake\Database\Type\DateTimeType::$dateTimeClass は非推奨になった。代わりに DateTimeType::useMutable() または DateTimeType::useImmutable() を使用できる
- Cake\Database\Type\\DateType::$dateTimeClass は非推奨になった。代わりにDateTimeType::useMutable() または DateType::useImmutable() を使用できる
- Cake\ORM\ResultSet::_calculateTypeMap() は使用されなくなり非推奨になった
- Cake\ORM\ResultSet::_castValues() は使用されなくなり非推奨になった
3.2.0-RC1 のリリースに重要な問題がなければ、今後4−5週のうちに安定版をリリースする予定です。3.2.0 のドキュメントは book (英語)、API (英語)で読むことができます。
いつもながら、問題報告やプルリクエストにより、このリリースの実現を支えてくれたコミュニティの皆さんに感謝します。
github よりパッケージリリースのダウンロード