3.7 移行ガイド
CakePHP 3.7 は 3.6 の API の完全上位互換です。 このページでは、3.7 の変更と改善についてのアウトラインを紹介します。
3.7.x にアップグレードするには、次の Composer コマンドを実行してください。
bash
php composer.phar require --update-with-dependencies "cakephp/cakephp:3.7.*"非推奨
以下は、非推奨のメソッド、プロパティーと動作の一覧です。 これらの機能は、4.0.0 以後に削除されるまで機能し続けます。
Cake\Form\Form::errors()は非推奨です。代わりにgetErrors()を使用してください。Cake\Http\Client\Response::$headersは非推奨です。代わりにgetHeaders()またはgetHeaderLine()を使用してください。Cake\Http\Client\Response::$bodyは非推奨です。代わりにgetStringBody()を使用してください。Cake\Http\Client\Response::$jsonは非推奨です。代わりにgetJson()を使用してください。Cake\Http\Client\Response::$xmlは非推奨です。代わりにgetXml()を使用してください。Cake\Http\Client\Response::$cookiesは非推奨です。代わりにgetCookies()を使用してください。Cake\Http\Client\Response::$codeは非推奨です。代わりにgetStatusCode()を使用してください。Cake\Http\Client\Response::body()は非推奨です。代わりにgetStringBody()を使用してください。Cake\ORM\Association::className()は非推奨になります。代わりにgetClassName()とsetClassName()を使用してください。- 情報を読むために
Cake\Database\Query::join()を使用することは非推奨です。 代わりにQuery::clause('join')を使用してください。 - 情報を読むために
Cake\Database\Query::from()を使用することは非推奨です。 代わりにQuery::clause('from')を使用してください。 Cake\Database\Connection::logQueries()は非推奨です。代わりにenableQueryLogging()とisQueryLoggingEnabled()を使用してください。Cake\Http\Response::withCookie()に文字列/配列パラメーターを設定することは非推奨です。 代わりにCake\Http\Cookie\Cookieインスタンスをわたす必要があります。Cake\Validation\Validation::cc()はcreditCard()に名前が変更されました。Cake\View\ViewVarsTrait::viewOptions()は非推奨です。代わりにviewBuilder()->setOptions()を使用してください。Cake\View\View::$requestは protected になります。他のコンテキストから ViewのリクエストインスタンスにアクセスするためにはView::getRequest()/setRequest()を使用してください。Cake\View\View::$responseは protected になります。他のコンテキストから ViewのリクエストインスタンスにアクセスするためにはView::getResponse()/setResponse()を使用してください。Cake\View\View::$templatePathは protected になります。代わりにgetTemplatePath()/setTemplatePath()を使用してください。Cake\View\View::$templateは protected になります。代わりにgetTemplate()/setTemplate()を使用してください。Cake\View\View::$layoutは protected になります。代わりにgetLayout()/setLayout()を使用してください。Cake\View\View::$layoutPathは protected になります。代わりにgetLayoutPath()/setLayoutPath()を使用してください。Cake\View\View::$autoLayoutは protected になります。代わりにenableAutoLayout()/isAutoLayoutEnabled()を使用してください。Cake\View\View::$themeは protected になります。代わりにgetTheme()/setTheme()を使用してください。Cake\View\View::$subDirは protected になります。代わりにgetSubDir()/setSubDir()を使用してください。Cake\View\View::$pluginは protected になります。代わりにgetPlugin()/setPlugin()を使用してください。Cake\View\View::$nameは protected になります。代わりにgetName()/setName()を使用してください。Cake\View\View::$elementCacheは protected になります。代わりにgetElementCache()/setElementCache()を使用してください。Cake\View\View::$Blocksは protected になります。ブロックと対話するためには Viewのパブリックメソッドを使用してください。Cake\View\View:$helpersは protected になります。代わりに HelperRegistry と対話するためにはhelpers()を使用してください。Cake\View\View::$uuidsは非推奨であり、4.0 で削除されます。Cake\View\View::uuid()は非推奨であり、4.0 で削除されます。Cake\View\Cell::$templateは protected になります。代わりにviewBuilder()->getTemplate()/setTemplate()を使用してください。Cake\View\Cell::$pluginは protected になります。代わりにviewBuilder()->getPlugin()/setPlugin()を使用してください。Cake\View\Cell::$helpersは protected になります。代わりにviewBuilder()->getHelpers()/setHelpers()を使用してください。Cake\View\Cell::$actionは protected になります。Cake\View\Cell::$argsは protected になります。Cake\View\Cell::$Viewは protected になります。Cake\View\Cell::$requestは protected になります。Cake\View\Cell::$responseは protected になります。Cake\View\ViewVarsTrait::$viewVarsは非推奨です。このパブリックプロパティーは、 4.0.0 で削除されます。代わりにset()を使用してください。Cake\Filesystem\Folder::normalizePath()は非推奨です。代わりにcorrectSlashFor()を使用するべきです。Cake\Mailer\Email::setConfigTransport()は非推奨です。代わりにCake\Mailer\TransportFactory::setConfig()を使用してください。Cake\Mailer\Email::getConfigTransport()は非推奨です。代わりにCake\Mailer\TransportFactory::getConfig()を使用してください。Cake\Mailer\Email::configTransport()は非推奨です。代わりにCake\Mailer\TransportFactory::getConfig()/setConfig()を使用してください。Cake\Mailer\Email::configuredTransport()は非推奨です。代わりにCake\Mailer\TransportFactory::configured()を使用してください。Cake\Mailer\Email::dropTransport()は非推奨です。代わりにCake\Mailer\TransportFactory::drop()を使用してください。- 以下のビュー関連の
Cake\Mailer\Emailのメソッドは非推奨になりました。setTemplate()、getTemplate()、setLayout()、getLayout()setTheme()、getTheme()、setHelpers()およびgetHelpers()です。 代わりにメールのビュービルダーを通して同じメソッドを使用してください。 例えば、$email->viewBuilder()->getTemplate()です。 Cake\Mailer\Mailer::layout()は非推奨です。 代わりに$mailer->viewBuilder()->setLayout()を使用してください。Helper::$themeは削除されました。代わりにView::getTheme()を使用してください。Helper::$pluginは削除されました。代わりにView::getPlugin()を使用してください。Helper::$fieldsetとHelper::$tagsは使用されていないので非推奨です。Helper::$helpersは protected になったため、ヘルパークラスの外からアクセスするべきではありません。Helper::$requestは削除されました。 代わりにView::getRequest()、View::setRequest()を使用してください。Cake\Core\Plugin::load()とloadAll()は非推奨です。代わりにApplication::addPlugin()を使用するべきです。Cake\Core\Plugin::unload()は非推奨です。代わりにPlugin::getCollection()->remove()かclear()を使用してください。- 以下の
Cake\Error\ExceptionRenderのプロパティは protected になりました。$error、$controller、$templateおよび$methodです。 TestCase::$fixturesにてアンダースコアー形式のフィクスチャー名を使用することは非推奨です。 代わりにキャメルケース形式の名前を使用してください。例えば、app.FooBarやplugin.MyPlugin.FooBarです。
緩やかな非推奨
以下のメソッド、プロパティー、機能は非推奨になりますが、5.0.0 まで削除されません。
Cake\TestSuite\ConsoleIntegrationTestCaseは非推奨です。代わりにCake\TestSuite\ConsoleIntegrationTestTraitをテストケースに含めるべきです。
振る舞いの変更
Cake\Database\Type\IntegerTypeは SQL を生成しデータベースの結果を PHP の型に変換するときに 値が数値ではない場合に例外を発生させるようになります。Cake\Database\Statement\StatementDecorator::fetchAll()は結果が見つからなかった時、falseの代わりに空配列を返します。Cake\Database\Statement\BufferedStatementはStatementDecoratorから継承しなくなり、 そして、IteratorAggregateインターフェイスを実装しなくなりました。代わりに、 コレクションと一緒にステートメントを使うことをよりよくサポートするために、Iteratorインターフェイスを直接実装します。- リクエストからのデータをエンティティーに変換するとき、 ORM は boolean 、integer 、float 、decimal 型のために 非スカラーデータを
nullに変換します。 ExceptionRendererはカスタムアプリケーション例外クラスのハンドラーメソッドを 常に 呼び出すようになりました。 以前は、カスタム例外クラスハンドラーメソッドはデバッグモードのみで呼び出されていました。Router::url()Router::url()でURLを生成した時、デフォルトで__methodキーをGETにします。
新機能
Cache
ArrayEngineが追加されました。このエンジンはメモリーキャッシュの実装において揮発性を提供します。 永続的なキャッシュストレージを必要としないテストスイートや長期実行プロセスに最適です。
Database
Cake\Database\FunctionsBuilder::rand()が追加されました。
Datasource
Paginatorは、一致するモデルのプレフィクス付きデフォルトソートフィールドも存在する場合、 クエリー文字列内のプレフィクスのないsort値をプライマリーモデルと一致させるようになりました。 例えば、コントローラーがデフォルトソートの['Users.name' => 'desc']を定義していれば、Users.nameかnameのどちらかをソートキーとして使用できます。
Error
ExceptionRendererは、例外処理時にプレフィクス付きのエラーコントローラーを探すようになりました。 これにより、アプリケーション内の各ルーティングプレフィックスに対して、 カスタムエラーコントローラーロジックを定義できます。ErrorHandlerMiddlewareは以前の例外をログに含めるようになりました。
Filesystem
Cake\Filesystem\Folder::normalizeFullPath()が追加されました。
Form
Cake\Form\Form::setData()が追加されました。 このメソッドはフォームのデフォルト値の定義を簡単にします。Cake\Form\Form::getData()が追加されました。
Http
Cake\Http\ServerRequest::setTrustedProxies()が追加されました。curl拡張がインストールされている場合、Cake\Http\Clientはデフォルトで Curl ベースのアダプターを使用するようになりました。- 新しい定数が
SecurityHeadersMiddlewareに追加されました。新しい定数は、 HTTP ヘッダーのコンポーネントを構築するために使用されます。
Mailer
Cake\Mailer\TransportFactoryとCake\Mailer\TransportRegistryが追加されました。 このクラスは、メールからトランスポート作成を抽出し、メールが将来的によりシンプルになることを可能にします。
ORM
Cake\ORM\EntityTrait::hasErrors()が追加されました。 このメソッドはエンティティーがエラーを持っているかどうかをgetErrors()よりも効率的にチェックできます。- 更新は多くの関連付けデータを持つようになり、
_idsを尊重します。 これにより、パッチ適用によって多くの関連付けが新しいエンティティーの作成と同じように機能し、多くの関連付けとの整合性が保たれます。
Shell
cake i18n extractは新しい--relative-pathsオプションを追加しました。 これは、POT ファイル内のパスのコメントを、絶対パスではなくアプリケーションのルートディレクトリーを基準にして作成します。cake i18n extractは新しい--marker-errorオプションを追加しました。 これは、POTファイル内のコメントとして非静的な値を使う翻訳関数の報告を可能にします。
TestSuite
- 新しいアサーションメソッドが
IntegrationTestCaseに追加されました。assertResponseNotEquals()assertHeaderNotContains()assertRedirectNotContains()assertFlashElement()assertFlashElementAt()
IntegrationTestCaseとConsoleIntegrationTestCaseによって提供されていたカスタムアサーションは、 現在、制約クラスを通して実装されています。TestCase::loadPlugins()、removePlugins()およびclearPlugins()は、Plugin::load()とPlugin::unload()が非推奨になったため、 動的にロードされたプラグインを扱うのをより簡単にするために追加されました。getMockForModel()は$methodsパラメーターにnullをサポートします。 これにより、元のコードを実行するモックを作成できます。これは、 動作を PHPUnit モックオブジェクトがどのように機能するかに合わせます。- メールのテストを容易にするために
EmailTraitが追加されました。 - 統合アサーションのデフォルトメッセージは、可能であれば発生した例外からより多くのコンテキストを提供するように改善されました。
Utility
Cake\Utility\Text::getTransliterator()が追加されました。Cake\Utility\Text::setTransliterator()が追加されました。Cake\Utility\Xml::loadHtml()が追加されました。
Validation
Cake\Validation\Validation::iban()が国際的な銀行口座番号を検証するために追加されました。Cake\Validation\Validator::allowEmptyString()、allowEmptyArray()、allowEmptyDate()、allowEmptyTime()、allowEmptyDateTime()およびallowEmptyFile()が追加されました。 これらの新しいメソッドはallowEmpty()に代わるもので、フィールドが空とみなすべきものをより細かく制御できます。
View
FormHelperは確認ボックス用に生成された Javascript スニペットをカスタマイズすることを可能にするconfirmJsテンプレート変数をサポートしました。FormHelperはカスタムバリデーションメッセージから HTML5 の検証メッセージを設定するためのautoSetCustomValidityオプションを持ちます。 詳しくは、 Html5 Validity Messages をご覧ください。ViewBuilder、setVar()、setVars()、getVar()、getVars()およびhasVar()が追加されました。これらのメソッドはViewVarsTraitに定義された public のviewVarsプロパティーを置き換えます。PaginatorHelperはプレフィクスのないソートキーを、デフォルトモデルのモデルプレフィクスのついたものと一致させるようになります。 これはCake\Datasource\Paginatorで加えられた変更でスムーズな操作を可能にします。FormHelperは 入力オプションで最大長が指定されていない場合は、maxLengthバリデーションルールを読み、 HTML 入力のmaxlength属性を自動的に定義します。