2012-10-05 22 views
1

Possible Duplicate:
Using Imagick in Symfony2?如何使用Symfony2的內

我是新來的Symfony「原始」 PHP MongoDB的PECL駕駛員所以這可能是一個僞問題。但自從幾個小時的谷歌我還沒有找到任何相關的答案,它可能值得一試這裏。

因此,基本上我使用Windows,Apache,純PHP,Mongodb和'raw'PHP_Mongodb PECL驅動程序(這裏使用'raw'這個詞來區別於Symfony2中的Doctrine Mongodb ODM包)。 PECL電驅動的工作完全正常,我可以只寫是這樣的:

<?php 
    $m = new Mongo(); 
    $db = $m->myDB; 
    $db->find(); 
    //Do Other DB Operations. 

上面的代碼工作得很好,沒有任何「使用」,「包括」或「要求」語句,因爲我遵循的標準說明及安裝在php.ini中的PECL驅動程序擴展。在Web瀏覽器中顯示phpinfo()時,Mongodb驅動程序信息正確顯示。一切都很完美。

然後我開始使用Symfony2,因爲它提供了URL重寫,MVC模式,安全性和其他有用的東西。 Mongodb ODM捆綁原理很好,除此之外,在我看來,它只能堅持PHP對象。我的項目中有一堆javascript對象持久存在,除了在其上放置一個'PHP包裝器'(創建一個僅包含該javascript對象的PHP對象)之外,根本沒有辦法做到這一點。

當我試圖使用好老PECL招交談的數據庫與上述相同的代碼塊,我得到這個錯誤:

Fatal error: Class 'MyProject\Controller\Mongo' not found in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\Symfony\src\MyProject\Controller\DefaultController.php on line 47. 

似乎Symfony2的在PHP阻塞或overwrited擴展路徑.ini,而只是尋找其自動類加載器。我想我需要更改autoload.php和/或AppKernel.php以包含該擴展名?請幫我理解這裏發生了什麼。我可以在Symfony2中使用PECL驅動嗎?或者是Mongodb ODM 是唯一的方法訪問Symfony2中的數據庫?謝謝!

+2

'new \ Mongo()',讓我取你的副本: – hakre

+0

@hakre謝謝!這非常有幫助! – Victor

回答

1

Symfony2適用於命名空間php。這使得使用非命名空間庫/類有點棘手,但你只需要知道這些技巧。

當您嘗試使用new Mongo()來獲取mongodb對象時,PHP會查找您當前的命名空間,這意味着它會在您的類中查找mongo()函數。要做到這一點,你需要爲mongo指定名字空間。由於它不使用名稱空間,因此PHP將其放置在全局名稱空間中。因此,要正確引用該函數,您需要使用new \Mongo(),並且PHP將在\ namespace中查看,而不是您當前的那個。