Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 学说2。自动生成代理_Php_Orm_Doctrine Orm - Fatal编程技术网

Php 学说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); 在我的测试环境中,代理

我有一个奇怪的问题。我想在原则2中关闭代理的自动生成。我发现这行代码应该(并且确实)做到这一点:

$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);