我想知道在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中扩展注册表吗?
答案 0 :(得分:2)
这应该不是问题。 ClassRegistry::init()
仅实例化对象一次。对init()
的后续调用将返回现有对象。
但是,我建议在Document的__construct
函数中注册监听器。这感觉更干净,因为我们没有将自执行PHP与类文件混合。它还允许稍后注入,这对单元测试很有用。