CakePHP中的重排序行为

CakePHP中的重排序行为,cakephp,cakephp-2.1,Cakephp,Cakephp 2.1,我正在编写一个插件,其中包含一个依赖于ContainableBehavior的行为。在我的行为中,我想在它的beforeFind()回调中调整任何查询条件,但我发现ContainableBehavior::beforeFind()已经被执行,所以我的更改当然是充耳不闻 据我所知,唯一的解决方案是手动更改行为执行顺序,以便在ContainableBehavior::beforeFind()之前调用我的行为的beforeFind()方法,但我在实现这一点时遇到了一些困难 我不想对可能使用我的插件的应

我正在编写一个插件,其中包含一个依赖于
ContainableBehavior
的行为。在我的行为中,我想在它的
beforeFind()
回调中调整任何查询条件,但我发现
ContainableBehavior::beforeFind()
已经被执行,所以我的更改当然是充耳不闻

据我所知,唯一的解决方案是手动更改行为执行顺序,以便在
ContainableBehavior::beforeFind()
之前调用我的行为的
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()
之前仍会激发

有没有办法强制执行行为回调的执行顺序,而不是完全的黑客作业,或者不会对任何可能部署插件的应用程序强加不切实际的依赖/标准


谢谢。

您在哪里分离和重新连接?
MyPluginBehavior::setup()
。我还尝试将行为优先级(2.1中新增)设置
MyPluginBehavior
的优先级调整为1,以便在调用
Containable
之前调用它的
beforeFind()。这也不起作用,所以我正在重新评估我最初的假设,即失败是由于forefind
调用之前的
顺序造成的。啊,好的。我查看了行为加载序列,发现
setup()
应该没问题,所以您在那里没问题。希望你知道发生了什么事。祝你好运嘿,罗布!我知道这是一个非常古老的问题,但我希望您仍然记得为实现上述模式所做的工作(控制每个附加行为的回调顺序)。我正在一个应用程序上做一些维护工作,需要同样的工作来编写我自己的行为。编辑:似乎可以使用
detach()/unload()
attach()/load()
。蛋糕2.6.3