2010-11-04 75 views
9

我有一個奇怪的問題。我想關掉我代理的自動生成的學說2.我發現這行代碼是應該做的(和做)的伎倆:學說2.自動生成代理

$config->setProxyDir(APPPATHSYSTEM."/proxies"); 
$config->setProxyNamespace('Proxies'); 

// Auto generate proxies for development 
$config->setAutoGenerateProxyClasses(DEVELOPMENT); 

在我的測試環境中的代理服務器位於應用/代理。即:

application/proxies/BaseUserProxy.php 

當我在現場環境中應用程序/代理/代理這是不實際的位置,我的代碼突然搜索的代理。

我明白它與命名空間有關,但我不明白爲什麼它在使用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 /網絡/應用/代理生成的代理。目錄列表如下所示:

BaseElementProxy.php 
BasePageProxy.php 
... 
BaseSiteProxy.php 

因此沒有額外的Proxies目錄。但是,當我刷新我的網頁它認爲有,它給了我下面的錯誤:爲什麼加入

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。「代理」。只是切換髮展常規會破壞我的應用程序,理論上應該是不可能的。

+0

嘗試將Proxies目錄設置爲APPPATHSYSTEM。它應該從那裏拿起'代理'命名空間。 – 2010-11-07 22:53:33

回答

2

我不認爲AutoGenerated代理關心。

而不是推動自動生成的代理生產,你應該可能doctrine orm:generate-proxies,我懷疑這會把他們放在你的生產代碼配置爲尋找他們的地方。

+0

我試了一下。檢查我的編輯。 – 2010-11-05 07:56:35

4

您是在OS X上開發並部署到Linux? OS X的文件系統是不敏感。所以我會經常遇到一個問題,我錯誤地類了一個類的情況,它在本地環境中運行和傳遞得很好,但在我們的服務器上扼殺。

所以在這種情況下,在OS X中,名稱空間「Proxies」能夠解析爲「/ proxies」,但在生產中,它找不到類文件夾,並在「/ proxies/Proxies 」。

3

如果您將該文件夾重命名爲「/ temp」,您將意識到路徑和命名空間之間的區別。

路徑是代理生成到的目錄的絕對路徑。命名空間對於允許您配置自動裝入器如何拾取這些實體是必需的。

您的案例中的路徑必須是類似於「代理/代理」的東西,而命名空間則是「代理」。必須將自動加載器配置爲在目錄「代理/」上偵聽名稱空間前綴「代理」。

這是Doctrine 2 RC1的所有心情,雖然我們找到了一種無需自動加載器的幫助就可以明確加載代理路徑的方法,無需額外費用。因此,代理命名空間configuratino僅用於確保沒有其他類與代理位於同一名稱空間中。

+0

我知道命名空間和路徑之間的區別:)。請再次閱讀我的帖子以瞭解真正的問題。儘管感謝你的反應。 – 2010-11-16 13:32:30