我的学说设置是否正确设置为生产


Is my Doctrine setup properly setup for production?

我使用Doctrine 2开发了一个网站,现在已经准备好上线了。当我在项目开始时设置Doctrine时,我主要担心的是如何让它工作,当时我并没有太担心性能问题。尽管如此,我并不需要性能达到痴迷的程度,但我有一种感觉,如果设置不正确,Doctrine的东西可能会得到非常糟糕的性能。我考虑的是代理类,我担心它们是在每次调用时生成的,这是不好的。我的代码看起来像这样:

$config=Setup::createConfiguration(FALSE);
...
$config->setProxyDir(__DIR__."/proxies");
$config->setAutoGenerateProxyClasses(false);
...
$em='Doctrine'ORM'EntityManager::create($conn,$config);

这行得通。所谓功,是指它的行为正确。我不认为它是优化的。

从教条手册中,它说setAutoGenerateProxyClasses:

获取或设置是否应该由Doctrine在运行时自动生成代理类。如果设置为FALSE,则必须通过doctrine命令行任务generate-proxies手动生成代理类。强烈建议在生产环境中使用FALSE。

因此,预期的行为将是我的设置,Doctrine应该尝试从代理目录加载代理。我必须运行generate-proxies命令把它们放在那里。

奇怪的是,即使我没有代理目录,它也能工作!所以看起来Doctrine仍然在以某种方式动态地生成代理。当然,我可以运行generate-proxies并希望得到最好的结果,但我更喜欢更系统化一些。是否有一种方法可以确保Doctrine正在加载代理而不是生成代理?

哎呀…我没有打电话给$config->setAutoGenerateProxyClasses(false);……false来自一个变量,毕竟它并不是完全false……当它实际上是false时,Doctrine拒绝自动创建代理,正如预期的那样。此外,还有orm:ensure-production-settings命令可以从cli返回。