我正在编写一个插件,其中包含一个依赖于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()
之前触发。
有没有办法强制行为回调的执行顺序不是一个完整的黑客工作,或者没有对可能部署该插件的任何应用程序强加不切实际的依赖/标准?
感谢。