我有一个奇怪的问题。我想在 Doctrine 2 中关闭代理的自动生成。我发现这行代码应该做(并且做)这个把戏:
$config->setProxyDir(APPPATHSYSTEM."/proxies");
$config->setProxyNamespace('Proxies');
// Auto generate proxies for development
$config->setAutoGenerateProxyClasses(DEVELOPMENT);
在我的测试环境中,代理位于application/proxies。IE:
application/proxies/BaseUserProxy.php
当我在实时环境中时,我的代码突然在application/proxies/Proxies搜索代理,这不是实际位置。
我确实理解它与命名空间有关,但我不明白为什么它在使用setAutoGenerateProxy方法时表现不同。
有任何想法吗?
编辑
我确实使用以下方法生成了新代理:
orm:generate-proxies
选项。
这给了我这个输出:
php doctrine.php orm:generate-proxies
Processing entity "Base\Element"
Processing entity "Base\Page"
...
Processing entity "Base\Site"
Proxy classes generated to "/var/www/application/proxies"
查看最后一行,代理是在 /var/www/application/proxies 中生成的。目录列表如下所示:
BaseElementProxy.php
BasePageProxy.php
...
BaseSiteProxy.php
所以没有额外的代理目录。但是当我刷新我认为有的网页时,它给了我以下错误:
Warning: require(/var/www/application//proxies/Proxies/BaseUserProxy.php)
[function.require]: failed to open stream:
No such file or directory in /var/www/library/Doctrine/Common/ClassLoader.php on line 148
为什么要添加额外的代理目录?如果我确实在每个请求上生成代理,它不会在额外的代理目录中查找。有人吗?
@Bryan M.:这不是解决方案,而是解决方法。此外,它不起作用。在生成代理时,如果应用您的建议,它们将在 APPPATHSYSTEM 中生成,我的 webapp 将尝试从 APPPATHSYSTEM.“代理”加载它们。问题是,如果我使用,系统会在不同位置查找代理:
$config->setAutoGenerateProxyClasses(DEVELOPMENT);
如果 DEVELOPMENT 为真,它将查看 APPPATHSYSTEM。如果 DEVELOPMENT 设置为 false,它将查看 APPPATHSYSTEM."Proxies"。只是切换 DEVELOPMENT constance 会破坏我的应用程序,这在理论上是不可能的。