1

可能重复:
在 Symfony2 中使用 Imagick?

我是 Symfony 的新手,所以这可能是一个愚蠢的问题。但是由于经过几个小时的谷歌搜索,我还没有找到任何相关的答案,所以在这里可能值得一试。

所以基本上我使用 Windows、Apache、纯 PHP、Mongodb 和“原始”PHP_Mongodb PECL 驱动程序(此处使用“原始”一词与 Symfony2 中的 Doctrine Mongodb ODM 包不同)进行 Web 应用程序开发。PECL 驱动程序工作得很好,我可以这样写:

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

上面的代码在没有任何“use”、“include”或“require”语句的情况下运行良好,因为我遵循标准说明并在 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 中访问数据库的唯一方法吗?谢谢!

4

1 回答 1

1

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

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

于 2012-10-05T15:49:40.757 回答