Php 学说2。自动生成代理
我有一个奇怪的问题。我想在原则2中关闭代理的自动生成。我发现这行代码应该(并且确实)做到这一点:Php 学说2。自动生成代理,php,orm,doctrine-orm,Php,Orm,Doctrine Orm,我有一个奇怪的问题。我想在原则2中关闭代理的自动生成。我发现这行代码应该(并且确实)做到这一点: $config->setProxyDir(APPPATHSYSTEM."/proxies"); $config->setProxyNamespace('Proxies'); // Auto generate proxies for development $config->setAutoGenerateProxyClasses(DEVELOPMENT); 在我的测试环境中,代理
$config->setProxyDir(APPPATHSYSTEM."/proxies");
$config->setProxyNamespace('Proxies');
// Auto generate proxies for development
$config->setAutoGenerateProxyClasses(DEVELOPMENT);
在我的测试环境中,代理位于应用程序/代理。i、 e:
当我在实时环境中时,我的代码会突然在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);
如果开发是真的,它将关注APPPATHSYSTEM。如果DEVELOPMENT设置为false,它将查看APPPATHSYSTEM.“代理”。仅仅切换开发周期就破坏了我的应用程序,这在理论上是不可能的。我认为自动生成的代理并不重要
与其将自动生成的代理推送到生产环境,您可能应该
orm:generate proxy
,我怀疑这会将它们放在生产代码配置为查找它们的位置。您是在OS X上开发并部署到Linux吗?OSX的文件系统不区分大小写。因此,我经常会遇到这样的问题:我错误地键入了一个类的大小写,它在本地环境中运行并通过得很好,但在我们的服务器上阻塞了
因此,在这种情况下,在OS X中,命名空间“Proxies”能够解析为“/Proxies”,但在生产环境中,它找不到类文件夹,并在“/Proxies/Proxies”下创建它。如果将文件夹重命名为“/temp”,则会发现路径和命名空间之间的区别 路径是生成代理的目录的绝对路径。命名空间是必要的,允许您配置自动加载程序如何拾取这些实体 本例中的路径必须类似于“proxies/proxies”,然后名称空间就是“proxies”。必须将自动加载程序配置为侦听目录“Proxies/”中的命名空间前缀“Proxies”
这是所有的情绪与条令2 RC1虽然,我们发现了一种方法,显式加载一个代理路径没有帮助的自动加载器在没有额外的费用。因此,只有确保没有其他类与代理位于同一名称空间中时,才需要配置代理名称空间。请尝试将代理目录设置为仅APPPATHSYSTEM。它应该从那里获取“代理”名称空间。我知道名称空间和路径之间的区别:)。再次阅读我的帖子,了解真正的问题。谢谢你的反应。
$config->setAutoGenerateProxyClasses(DEVELOPMENT);