1

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

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

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

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

我的问题是关于 nexted 调用ClassRegistery::init('Document')以及上述是否会导致Document创建两个实例。

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

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

Document实例化了多少次?

  • 来自控制器的第一次调用ClassRegistery::init('Document')加载 Document.php 文件。
  • 是否会ClassRegistery::init('Document')从 Document.php 的底部进行第二次调用,befoe第一次调用已完成?

这会以某种方式在 CakePHP 中散布注册表吗?

4

1 回答 1

2

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

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

于 2013-02-15T18:02:02.240 回答