3.6 移行ガイド
CakePHP 3.6 は、3.5 の API の完全上位互換です。 このページでは、3.6 の変更と改善についてのアウトラインを紹介します。
3.6.x にアップグレードするには、次の Composer コマンドを実行してください。
bash
php composer.phar require --update-with-dependencies "cakephp/cakephp:3.6.*"非推奨
以下は、非推奨のメソッド、プロパティーと動作の一覧です。 これらの機能は、4.0.0 以後に削除されるまで機能し続けます。
bin/cake orm_cacheは、今はbin/cake schema_cacheです。Cake\Cache\Engine\ApcEngineは、拡張モジュール名を反映しCake\Cache\Engine\ApcuEngineに名前変更されました。Cake\ORM\Table::association()は非推奨です。代わりにgetAssociation()を使用してください。Xcacheキャッシュエンジンは非推奨になります。Xcache 拡張は もはや活発にメンテナンスされていません。もし xcache を使っているなら、代わりに APCu、Memcached または Redis の採用を考えてください。Router::setRequestInfo()に配列の一覧を渡すことは非推奨です。代わりにServerRequestのインスタンスを渡してください。Cake\Controller\Controller:$nameは protected になります。 他のコンテキストの中でコントローラーの名前にアクセスするには、Controller::getName() と setName()を使用してください。Cake\Controller\Controller:$pluginは protected になります。 他のコンテキストの中でコントローラーのプラグインにアクセスするには、Controller::getPlugin() と setPlugin()を使用してください。Cake\Controller\Controller:$autoRenderは protected になります。代わりにenableAutoRender() と disableAutoRender() と isAutoRenderEnabled()を使用してください。ValidationSet::isPresenceRequired()とValidationSet::isEmptyAllowed()のセッターモードは非推奨です。代わりにrequirePresence()とallowEmpty()を使用してください。Cake\Form\Form::validator()は非推奨です。代わりにgetValidator()とsetValidator()を使用してください。Cake\ORM\TableRegistryの static な API は非推奨になります。代わりにテーブルロケーターを 直接使用してください。グローバルなCake\ORM\Locator\TableLocatorは、Cake\ORM\TableRegistry::getTableLocator()を介するか、Cake\ORM\Locator\LocatorAwareTraitを使用してアクセスすることができます。Cake\View\Helper\FormHelper::widgetRegistry()は非推奨です。代わりにgetWidgetLocator()とsetWidgetLocator()を使用してください。Cake\ORM\Behavior\TranslateBehavior::locale()は非推奨です。代わりにgetLocale()とsetLocale()を使用してください。Cake\Datasource\QueryTrait::formatResults()のゲッター部分は非推奨です。代わりにgetResultFormatters()を使用してください。Cake\Datasource\QueryTrait::mapReduce()のゲッター部分は非推奨です。代わりにgetMapReducers()を使用してください。Cake\ORM\Query::contain()のゲッター部分は非推奨です。代わりにgetContain()を使用してください。Cake\Datasource\QueryInterface::repository()のゲッター部分は非推奨です。代わりにgetRepository()を使用してください。Cake\Database\Type::map()のゲッター部分は非推奨です。代わりにgetMap()を使用してください。Cake\Database\Type::map()で完全な型マップを設定することは非推奨です。代わりにsetMap()を使用してください。Cake\Database\Type::map()へオブジェクトで$classNameを渡すことは非推奨です。代わりにset()を使用してください。
いくつかのクラスは 名前変更 されました。古い名前は 4.0 まで動作しますが、 非推奨警告が表示されます。
Cake\Network\Exception\BadRequestExceptionは、Cake\Http\Exception\BadRequestExceptionに名前変更されます。Cake\Network\Exception\ConflictExceptionは、Cake\Http\Exception\ConflictExceptionに名前変更されます。Cake\Network\Exception\ForbiddenExceptionは、Cake\Http\Exception\ForbiddenExceptionに名前変更されます。Cake\Network\Exception\GoneExceptionは、Cake\Http\Exception\GoneExceptionに名前変更されます。Cake\Network\Exception\HttpExceptionは、Cake\Http\Exception\HttpExceptionに名前変更されます。Cake\Network\Exception\InternalErrorExceptionは、Cake\Http\Exception\InternalErrorExceptionに名前変更されます。Cake\Network\Exception\InvalidCsrfTokenExceptionは、Cake\Http\Exception\InvalidCsrfTokenExceptionに名前変更されます。Cake\Network\Exception\MethodNotAllowedExceptionは、Cake\Http\Exception\MethodNotAllowedExceptionに名前変更されます。Cake\Network\Exception\NotAcceptableExceptionは、Cake\Http\Exception\NotAcceptableExceptionに名前変更されます。Cake\Network\Exception\NotFoundExceptionは、Cake\Http\Exception\NotFoundExceptionに名前変更されます。Cake\Network\Exception\NotImplementedExceptionは、Cake\Http\Exception\NotImplementedExceptionに名前変更されます。Cake\Network\Exception\ServiceUnavailableExceptionは、Cake\Http\Exception\ServiceUnavailableExceptionに名前変更されます。Cake\Network\Exception\UnauthorizedExceptionは、Cake\Http\Exception\UnauthorizedExceptionに名前変更されます。Cake\Network\Exception\UnavailableForLegalReasonsExceptionは、Cake\Http\Exception\UnavailableForLegalReasonsExceptionに名前変更されます。Cake\Network\Sessionは、Cake\Http\Sessionに名前変更されます。Cake\Network\Session\DatabaseSessionは、Cake\Http\Session\DatabaseSessionに名前変更されます。Cake\Network\Session\CacheSessionは、Cake\Http\Session\CacheSessionに名前変更されます。Cake\Network\CorsBuilderは、Cake\Http\CorsBuilderに名前変更されます。Cake\View\Widget\WidgetRegistryは、Cake\View\Widget\WidgetLocatorに名前変更されます。
非推奨警告の無効化
非推奨警告は、将来のバージョンの CakePHP の準備に役立つように意図されていますが、 コードの更新は段階的な作業になる可能性があります。 新しい方法の採用に取り組んでいる間、非推奨警告を無効にすることができます。 config/app.php の中で Error.errorLevel を設定できます。 :
text
// config/app.php の中で
'Error' => [
'errorLevel' => E_ALL ^ E_USER_DEPRECATED
]非推奨警告が解消された後は、エラーレベルを E_ALL に設定して、 非推奨のメソッドの今後の使用を防ぐことができます。
振る舞いの変更
以下の変更は、API 互換性はありますが、あなたのアプリケーションに影響を及ぼし得る 振る舞いのわずかな差異があります。
Cake\Utility\Security::randomBytes()は、PHP5 で セキュアーなエントロピーのソースが見つからない場合に例外をスローします。SecurityComponentで生成されたトークンには、ユーザー/セッション間のトークンの再利用を防ぐために、 ユーザーのセッション ID が含まれるようになりました。これにより、セキュリティトークンの値が変更され、 以前のバージョンの CakePHP で作成されたフォームは 3.6 で検証に失敗します。Cake\Database\Query::page()は、 ページの値が 1 より小さい場合、例外が発生します。- ページネーションでは、すべてのページの複数のフィールドを並べ替えることができます。 以前は、最初のページのみを複数の列でソートすることができました。 さらに、クエリー文字列で定義されたソート条件は、デフォルトの順序を完全に置き換えるのではなく、 デフォルトの順序パラメーターの 先頭に追加 されます。
- タスククラスが見つからない場合、シェルクラスは例外をスローするようになりました。 以前は無効なタスクは暗黙のうちに無視されました。
- 可能であれば、CakePHP 内部で例外を連鎖させ、根本的なエラーの原因を露呈させることができます。
- MySQL コネクションのエンコーディングは
utf8mb4(4バイトユニコード) がデフォルトです。 旧デフォルトのutf8を引き続き使用したい場合は、config/app.phpの中で、 アプリケーションのデータソースのエンコーディングを 'utf8' に設定してください。 - APCu と Wincache エンジンは、TTL を持つデータに対して別々の
_expiresキーを 設定しなくなりました。代わりに、キャッシュエンジンのネイティブ TTL 機能に依存します。 デフォルトでは、単一のリクエストと CLI スクリプトに対する APCu で作成された すべてのエントリーの有効期限は同じになります。この動作を変更するにはapc.use_request_timeを使うことができます。 Router::parseNamedParams()は、もはやリクエストオブジェクトを直接変更しません。 代わりに、このメソッドの戻り値を使用して、変更されたリクエストにアクセスする必要があります。- 文字列値に属性マッチャーを使用するとき、
Hash::extract()は、もはや整数0と一致しません。 - コンソール環境は
--pluginオプションで指定されたプラグインを自動的にロードしなくなりました。 その代わりに、アプリケーションのブートストラップによって必要なプラグインがすべてロードされるようにする 必要があります。 Cake\Http\CorsBuilder::build()はもはやレスポンスを変更しません。build()が返す更新されたレスポンスを使用する必要があります。
Cache
- Fallback エンジンは、どのキャッシュ設定でも
fallback = falseをセットすることで 無効にすることができます。
Collection
appendItem(),prepend(),prependItems()メソッドがCollectionTraitに追加されました。
Configure
consumeOrFail()が追加され、データが存在することを期待して読み込む API を完成させました。
Console
CLI ツールを構築する新しい方法が追加されました。 シェルとタスクには、互換性を損なうことなく修正するのが難しいいくつかの欠点があります。 Cake\Console\Command はコンソールアプリケーションを構築するための推奨方法として、 長期的に Shell を置き換えます。詳しくは コンソールコマンド セクションをご覧ください。
ConsoleOptionParse::enableSubcommandSort()が追加されました。このメソッドを使用すると、 生成されたヘルプテキスト内のサブコマンドの自動ソートを無効にすることができます。
Core
- プラグインは、 Plugin Objects を定義できるようになります。これらのクラスはオプションであり、 プラグインがミドルウェアおよびコンソールコマンドをホストアプリケーションに追加できるようにします。 プラグインを設定および定義するためのクラスベースの方法です。
- より詳細なエラーメッセージを作成するときに、正しいクラス/型名を取得するために
getTypeName()が追加されました。
Database
Query::identifier()が追加されました。 このメソッドを使用すると、複雑なクエリーで使用する識別子の式を簡単に作成できます。- 長期間実行されているスクリプトで接続がタイムアウトすると、データベース接続は自動的に再確立されます。
Cake\Database\Type\BatchCastingInterfaceが追加されました。 このインターフェイスにより、型クラスは、すべての列を一括して操作することによって キャスト操作を最適化できます。このインターフェイスは現在カスタムタイプで使用でき、 4.x のコアタイプで使用されます。Cake\Database\Type\DateTimeType::setTimezone()が追加されました。 このメソッドを使用すると、datetime オブジェクトをデータベースに挿入する前に変換する タイムゾーンを設定できます。データベースから読み取られる日時データは変更されません。Cake\Database\Statement\StatementDecorator::fetchAssoc()が追加されました。Cake\Database\Statement\BufferedStatement::fetchAssoc()が追加されました。Cake\Database\Statement\StatementDecorator::FETCH_TYPE_NUMが追加されました。Cake\Database\Statement\StatementDecorator::FETCH_TYPE_ASSOCが追加されました。Cake\Database\Statement\StatementDecorator::FETCH_TYPE_OBJが追加されました。
Datasource
binaryuuidという新しい抽象型が追加されました。 MySQL と SQLite では、BINARY(16)がカラムの型として使われます。 SQLServer と、Postgres はネイティブの UUID 型を使用します。
Event
Cake\Event\EventInterfaceが、今後より良いタイプヒントが得られるようにするために 追加されました。
Form
- Form クラスは
_validatorClassプロパティーをサポートするようになりました。 これはORM\Tableと同じように動作します。
Http
Response::withAddedLink()が追加され、Linkヘッダーの作成が簡単になりました。BodyParserMiddlewareが追加されました。
I18n
- FormHelper に残った2つの i18n 翻訳文字列
'Edit %s'と'New %s'は、'Edit {0}'と'New {0}'になります。 CakePHP からの翻訳メッセージを使用している場合は、PO ファイル内の翻訳を調整してください。
Mailer
Emailのさまざまな電子メールアドレス設定メソッドは、個々のプロパティーをリセットできるように[]を受け入れるようになりました。
ORM
EntityTrait::isEmpty()とEntityTrait::hasValue()が追加されました。Table::getAssociation()は、.で区切られたパス (例Users.Comments) を使って深くネストされた関連付けを読むことができるようになりました。 このメソッドは、未知の関連付けを取得するときに例外を発生させます。Table::addBehaviors()が追加され、一度に複数のビヘイビアーを追加するのが簡単になりました。Table::getBehavior()が追加されました。CounterCacheBehaviorコールバック関数はカウンタ値の更新をスキップするためにfalseを返すことができます。TimestampBehaviorは、常にミュータブルな time インスタンスを使用するのではなく、 time オブジェクトを作成するときに正しいミュータブル/イミュータブルクラス型を使用するようになりました。Query::selectAllExcept()が追加されました。Query::whereInList()とQuery::whereNotInList()は、INとNOT IN条件を囲んだ1つのラッパーとして追加されています。
Routing
Cake\Routing\Route\EntityRouteが追加されました。 このルートクラスは、エンティティーからのデータを必要とするルートを構築するのを容易にします。 詳しくは Entity Routing セクションをご覧ください。- ルーティング変数は、
{var}スタイルのプレースホルダーを使用できます。 このスタイルは、中間の語の変数を定義できます。{var}プレースホルダーと:varスタイルプレースホルダーを組み合わせることはできません。 Router::routeExists()が追加されました。 このメソッドを使用すると、ルート配列を有効なルートに解決できるかどうかを確認できます。- ルート接続でコンパクトな '文字列ターゲット'、例えば
Bookmarks::indexを使用できるようになりました。詳しくは Routes Configuration をご覧ください。 RoutingMiddlewareはルートによって作成されたルートコレクションをキャッシュすることができます。 ルートをキャッシュすると、アプリケーションの起動時間が大幅に短縮されます。 また、インスタンス化しカレントオブジェクト($this)をプラグインルーティングに渡す必要があります。
Shell
cake assets copyコマンドには、プラグインアセットがすでにアプリケーションの webroot に存在する場合、上書きするための--overwriteオプションが追加されました。
Utility
Security::randomString()が追加されました。
Validation
Validation::compareFields()はValidation::compareWith()のより柔軟なバージョンとして追加されました。Validator::notSameAs()が追加され、 フィールドが別のフィールドと同じでないかどうかを簡単に確認できます。- 新しいフィールド比較メソッドが追加されました。
equalToField(),notEqualToField(),greaterThanField(),greaterThanOrEqualToField(),lessThanField(),lessThanOrEqualToField()が追加されました。 - Validator ルールは、
ruleキーが定義されていない場合、 ルールエイリアスをルールメソッドとして使用します。 Validator::addNested()とaddNestedMany()は、他のバリデーターメソッドと同様にwhenとmessageパラメーターをサポートするようになりました。
View
UrlHelper::script(),css(), そしてimage()メソッドはtimestampオプションをサポートしています。このオプションを使用すると、単一のメソッド呼び出しに対してAsset.timestampの設定を行うことができます。- Cell クラスには
initialize()フックメソッドが追加されました。 PaginatorHelperはソート方向が変更されるたびにページを1にリセットします。