尝试加载类" ObjectID"来自命名空间" MongoDB \ BSON"

时间:2017-11-17 15:30:17

标签: mongodb symfony doctrine doctrine-odm doctrine-mongodb

我试图使用DoctrineMongoDBBundle,但它给了我这个错误:

  

尝试加载类" ObjectID"来自命名空间" MongoDB \ BSON"。难道   你忘记了"使用"另一个命名空间的语句?

我已经搜遍了所有原因,但我找不到为什么会收到此错误。

我的mongodb安装得很好,一个mongodb状态告诉我它是活跃的。我想我正确地设置了类......等等错误来自何处?

堆栈追踪:

  

Symfony \ Component \ Debug \ Exception \ ClassNotFoundException:试图   加载类" ObjectID"来自命名空间" MongoDB \ BSON"。你忘记了吗?   "使用"另一个命名空间的语句?

     

在vendor / alcaeus / mongo-php-adapter / lib / Mongo / MongoId.php:224

     

在MongoId-> createObjectID(null)        (供应商/ alcaeus /蒙戈-PHP-适配器/ LIB /蒙戈/ MongoId.php:41)

     

在MongoId-> __ construct()        (供应商/教义/ mongodb的-ODM / LIB /学说/ ODM / MongoDB的/ ID / AutoGenerator.php:34)

     

在   教义\ ODM \ MongoDB的\ ID为\ AutoGenerator->生成(对象(DocumentManager),   对象(产品))        (供应商/教义/ mongodb的-ODM / LIB /学说/ ODM / MongoDB的/ UnitOfWork.php:1107)

     

在   教义\ ODM \ MongoDB的\ UnitOfWork-> persistNew(对象(ClassMetadata),   对象(产品))        (供应商/教义/ mongodb的-ODM / LIB /学说/ ODM / MongoDB的/ UnitOfWork.php:1710)

     

在Doctrine \ ODM \ MongoDB \ UnitOfWork-> doPersist(对象(产品),   数组(' 000000002ed55d6b00000000057952ca' =>对象(产品)))        (供应商/教义/ mongodb的-ODM / LIB /学说/ ODM / MongoDB的/ UnitOfWork.php:1674)

     

在Doctrine \ ODM \ MongoDB \ UnitOfWork-> persist(object(Product))        (供应商/教义/ mongodb的-ODM / LIB /学说/ ODM / MongoDB的/ DocumentManager.php:412)

     

在Doctrine \ ODM \ MongoDB \ DocumentManager-> persist(object(Product))        (SRC / Acme公司/ StoreBundle /控制器/ DefaultController.php:30)

     

在Acme \ StoreBundle \ Controller \ DefaultController-> createAction()

     

at call_user_func_array(array(object(DefaultController),   ' createAction'),array())        (供应商/ symfony的/ symfony的/ SRC / Symfony的/组件/ HttpKernel / HttpKernel.php:153)   在Symfony \ Component \ HttpKernel \ HttpKernel-> handleRaw(object(Request),   1)        (供应商/ symfony的/ symfony的/ SRC / Symfony的/组件/ HttpKernel / HttpKernel.php:68)

     

在Symfony \ Component \ HttpKernel \ HttpKernel->句柄(对象(请求),   1,真的)        (供应商/ symfony的/ symfony的/ SRC / Symfony的/组件/ HttpKernel / Kernel.php:169)

     

在Symfony \ Component \ HttpKernel \ Kernel->句柄(对象(请求))        (网络/ app_dev.php:29)

     

at require(' /var/www/html/geoservicesgrandnancy/web/app_dev.php')        (供应商/ symfony的/ symfony的/ SRC / Symfony的/捆绑/ WebServerBundle /资源/ router.php:42)

php --ri mongodb | grep version输出:

  

MongoDB扩展版本=> 1.3.2,libbson捆绑版本=> 1.8.1,   libmongoc bundled version => 1.8.1

演示的简单示例:

<?php

namespace Acme\StoreBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use MongoDB\BSON\ObjectID; //Adding this or not doesn't change anything

class DefaultController extends Controller
{
    /**
     * @Route("/")
     */
    public function indexAction()
    {
        var_dump(new MongoDB\BSON\ObjectID); die();
        return $this->render('AcmeStoreBundle:Default:index.html.twig');
    }
}

composer.json需要得到:

"require": {
        "php": ">=5.5.9",
        "alcaeus/mongo-php-adapter": "^1.1",
        "doctrine/doctrine-bundle": "^1.6",
        "doctrine/mongodb-odm": "^1.2",
        "doctrine/mongodb-odm-bundle": "^3.4",
        "doctrine/orm": "^2.5",
        "incenteev/composer-parameter-handler": "^2.0",
        "sensio/distribution-bundle": "^5.0.19",
        "sensio/framework-extra-bundle": "^3.0.2",
        "symfony/monolog-bundle": "^3.1.0",
        "symfony/polyfill-apcu": "^1.0",
        "symfony/swiftmailer-bundle": "^2.3.10",
        "symfony/symfony": "3.3.*",
        "twig/twig": "^1.0||^2.0"
    },

1 个答案:

答案 0 :(得分:0)

你好,你需要包含“alcaeus / mongo-php-adapter”:“^ 1.1”作为你的包的一部分,并将预期的mongo扩展暴露为失败解决方案,如

  "provide": {
    "ext-mongo": "1.6.12"
  },

完整的作曲家文件可能就像

{
  "require": {
    "php": "^7.1.3",
    "ext-mongodb": ">=1.1.2",
    "alcaeus/mongo-php-adapter": "^1.1",
    "doctrine/mongodb-odm-bundle": "^3.3",
    ...
  },
  "provide": {
    "ext-mongo": "1.6.12"
  }
  ...
}