Php 将模型注册为事件侦听器
我想知道在模型的PHP文件中将模型类注册为CakeEventListener是否是一个好主意 例如,如果我创建了一个实现侦听器的名为Document的模型,并在Document.php的底部将其注册为侦听器Php 将模型注册为事件侦听器,php,cakephp,cakephp-2.3,Php,Cakephp,Cakephp 2.3,我想知道在模型的PHP文件中将模型类注册为CakeEventListener是否是一个好主意 例如,如果我创建了一个实现侦听器的名为Document的模型,并在Document.php的底部将其注册为侦听器 class Document extends AppModel implements CakeEventListener { ..... } CakeEventManager::instance()->attach(ClassRegistery::init('Document'
class Document extends AppModel implements CakeEventListener
{
.....
}
CakeEventManager::instance()->attach(ClassRegistery::init('Document'));
我的问题是关于对ClassRegistery::init('Document')
的nexted调用,以及上述调用是否会导致创建Document
的两个实例
例如,假设我的控制器中有以下内容
class DocumentsController extends AppController
{
public function index()
{
$model = ClassRegistery::init('Document');
.....
文档
实例化了多少次
- 控制器对
的第一次调用加载Document.php文件ClassRegistery::init('Document')
- 在Document.php
第一次调用完成之前,不会有第二次从Document.php的底部调用befoe
ClassRegistery::init('Document')
这会不会在CakePHP中分散注册表?这应该不是问题
ClassRegistry::init()
只实例化一次对象。对init()
的后续调用返回现有对象
然而,我建议在文档的
\u构造
函数中注册侦听器。这感觉更干净,因为我们没有将自执行PHP与类文件混合。它还允许以后可能的注入,这对单元测试很有用。谢谢,但如果我将其放入构造中,那么我将从正在执行的::init()调用中调用::init()。你明白吗?这就是为什么我想知道这是否是一个问题。如果您传递$this
而不是使用类注册表再次初始化它,则不是这样。