如何在Symfony2中使用'原始'PHP Mongodb PECL驱动程序

时间:2012-10-05 14:54:22

标签: php mongodb symfony pecl

  

可能重复:
  Using Imagick in Symfony2?

我是Symfony的新手,所以这可能是一个虚假的问题。但是,经过几个小时的谷歌我还没有找到任何相关的答案,这可能值得一试。

所以基本上我使用的是Windows,Apache,纯PHP,Mongodb以及' raw' PHP_Mongodb PECL驱动程序(这里使用的词' raw'与Symfony2中的Doctrine Mongodb ODM捆绑包不同)用于Web应用程序开发。 PECL驱动程序工作得很好,我可以写这样的东西:

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

上述代码工作正常,没有任何&#39;使用&#39;&#39;包含&#39;或者&#39;要求&#39;自从我遵循标准指令并在php.ini中设置PECL驱动程序扩展以来的语句。在Web浏览器中显示phpinfo()时,Mongodb驱动程序信息会正确显示。一切都很完美。

然后我开始使用Symfony2,因为它提供了url重写,MVC模式,安全性和其他有用的东西。 Doctrine 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.ini中的扩展路径,同时只查找其自动类加载器。我想我需要更改autoload.php和/或AppKernel.php以包含该扩展名吗?请帮助我了解这里发生了什么。我可以在Symfony2中使用PECL驱动程序吗?或者是Doctrine Mongodb ODM 在Symfony2中访问数据库的唯一途径?谢谢!

1 个答案:

答案 0 :(得分:1)

Symfony2适用于命名空间php。这使得使用非命名空间库/类有点棘手,但你真的需要知道这些技巧。

当您尝试使用new Mongo()来获取mongodb对象时,PHP会查找当前的命名空间,这意味着它会在您的类中查找mongo()函数。要使其工作,您需要为mongo指定名称空间。由于它不使用名称空间,因此PHP将其放在全局名称空间中。因此,要正确引用该函数,您需要使用new \Mongo(),PHP将查找您的\ namespace而不是当前的。{/ p>