に依存する動作を含むプラグインを作成していますContainableBehavior
。私の行動では、beforeFind()
コールバックでクエリ条件を微調整したいと思いますが、それContainableBehavior::beforeFind()
はすでに実行されていることがわかっているので、もちろん私の変更は耳が聞こえません。
私が知る限り、唯一の解決策は、ビヘイビアのbeforeFind()
メソッドが の前ContainableBehavior::beforeFind()
に呼び出されるようにビヘイビアの実行順序を手動で変更することですが、それを実現するのに問題があります。
私のプラグインを使用する可能性のあるアプリについて仮定をしたくないので、ユーザーが使用している動作をどのように構成する必要があるかを定義する任意の依存関係を作成したくありません。必要な場所で必要な調整をその場で行いたいだけです。私が最も理にかなっていると思ったのはこれです:
ではMyBehavior::setup()
、単に をデタッチして再アタッチしようとしているだけContainableBehavior
なので、親モデルにアタッチされた動作のコレクションでは、 の後に落ちMyBehavior
ます。
# Assume that a condition checking existence is in place
$model->Behaviors->detach( 'Containable' );
$model->Behaviors->attach( 'Containable' );
次に、アタッチされたビヘイビアのリストをダンプすると、アタッチされたビヘイビアが希望どおりに並べられた配列が得られますが、ContainableBehavior::beforeFind()
それでもMyBehavior::beforeFind()
.
完全なハックジョブではない、またはプラグインを展開する可能性のあるアプリに非現実的な依存関係/標準を課さない動作コールバックの実行順序を強制する方法はありますか?
ありがとう。