Cakephp プログラミング

[Cakephp2→4]モデル編: カスタムファインダーの移行について

Cake2からCake4への大規模移行プロジェクトがひそかに開始されました。

そこで、以前、別のCakephpアップデートプロジェクトに参画しときながら、カスタムファインダーの移行のタイミングを忘れていたので、書き残します。

例えば、Cake2側で下記のモデル内にカスタムファインダーが定義されているとします。

 shortcode
protected function _findHogefuga($state, $query, $results = array()) {}

弊社では、移行の順番として、「モデル→コントローラー→アクションに付随したビュー」という形で作業を進めていきますが、

カスタムファインダはモデル単体では移行できず(実際にカスタムファインダが呼ばれている場所を移行しなければ、メソッドをコールできないため)

複数の箇所でカスタムファインダが呼び出されている場合、しばらくはCake2とCake4の両方を呼び出せる形でキープしておかなければなりません

 

ちなみに、通常メソッドに関しては、Cake2側モデル内にCake4側メソッドを読み出す仕組みを設け、そこでCake2側メソッドが呼ばれた際に、Cake4側メソッドを呼び出すということが必要です(うーん、伝わりづらいか...)

もちろん、メソッド名を重複させるとエラーが発生するので、弊社では移行済みのCake2側メソッドに___(アンダーバー三つ)のプレフィックスをつけ、いつでも切り替えることができるように、旧メソッドも残しています。

 

話は戻って、カスタムファインダーの場合は、Cake2とCake4をどちらも呼び出せる状態にしておく必要があるため、コントローラーやシェル内部で実際にコールされるタイミングで、対象のカスタムファインダーを移行させ、Cake4のカスタムファインダーを利用する、という形が必要です。(一度移行したものは、もちろん、他のアクション箇所で利用されていても、すぐにCake4のカスタムファインダを利用できるということになる)

最終的にはCake4だけのカスタムファインダーメソッドの利用だけになります。

 shortcode
public function findHogefuga (Query $query, array $options)
{
// カスタムファインダーロジック
}

移行の際はCake4のお作法にのっとって移行しましょう。

結論

Cakeアップデートのモデル移行の際は、通常メソッドを優先的に進め、カスタムファインダー箇所は後の利用時までスルーしておきましょう。

 

-Cakephp, プログラミング
-