【发布时间】:2016-04-07 11:19:39
【问题描述】:
有没有人需要绑定 ActiveRecord 事件处理程序,使其仅在某些情况下触发?
在理想情况下,ActiveRecord on() 方法也将采用 $scenarios 参数,并且仅当 ActiveRecord 在事件发生时正在使用该场景时才触发处理程序。但由于情况并非如此,我正在寻找一种干净、可靠的方式来实现此类功能。
编辑:这需要与 any 事件一起使用,包括由 Yii 框架触发的内置事件(例如 ActiveRecord::EVENT_AFTER_INSERT)。
【问题讨论】:
-
我认为您可以扩展
\yii\base\Event并添加自己的方法onScenario()。它将与on()相同,但会在场景中增加一个参数。您可以像 ActiveRecord 中的方法scenarios()一样使用它。此外,您还需要覆盖trigger()方法并在父调用之前添加场景检查。
标签: events activerecord yii2 scenarios