2012-10-05 87 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中查看,而不是您当前的那个。