将模型注册为事件侦听器

时间:2013-02-15 16:21:32

标签: php cakephp cakephp-2.3

我想知道在Model的PHP文件中将Model类注册为CakeEventListener是否是一个好主意。

例如,如果我创建了一个名为Document的模型来实现监听器,并且在Document.php的底部,我将其注册为监听器。

class Document extends AppModel implements CakeEventListener
{
   .....
}

CakeEventManager::instance()->attach(ClassRegistery::init('Document'));

我的问题是关于ClassRegistery::init('Document')的调用,如果上述内容会导致创建Document的两个实例。

例如,假设我的控制器中有以下内容。

class DocumentsController extends AppController
{
     public function index()
     {
         $model = ClassRegistery::init('Document');
         .....

Document实例化了多少次?

  • 从控制器第一次调用ClassRegistery::init('Document')会加载Document.php文件。
  • 在第一次通话结束后,第一次通话结束后,第二次拨打ClassRegistery::init('Document')是否会从{。} befoe的底部开始?

这会以某种方式在CakePHP中扩展注册表吗?

1 个答案:

答案 0 :(得分:2)

这应该不是问题。 ClassRegistry::init()仅实例化对象一次。对init()的后续调用将返回现有对象。

但是,我建议在Document的__construct函数中注册监听器。这感觉更干净,因为我们没有将自执行PHP与类文件混合。它还允许稍后注入,这对单元测试很有用。

相关问题