0

我正在编写一个插件,其中包含一个依赖于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().

有什么方法可以强制执行行为回调的执行顺序,这不是一个完全的黑客工作,或者不会对可能部署插件的任何应用程序强加不切实际的依赖/标准?

谢谢。

4

0 回答 0