【问题标题】:Attempted to load class "ObjectID" from namespace "MongoDB\BSON"尝试从命名空间“MongoDB\BSON”加载类“ObjectID”
【发布时间】:2017-11-17 15:30:16
【问题描述】:

我正在尝试使用 DoctrineMongoDBBundle,但它给了我这个错误:

尝试从命名空间“MongoDB\BSON”加载类“ObjectID”。做过 你忘记了另一个命名空间的“使用”语句?

我已经到处搜索了一个原因,但我找不到我收到此错误的原因。

我的 mongodb 安装正常,mongodb 状态告诉我它处于活动状态。我想我正确地设置了类......等等。错误来自哪里?

堆栈跟踪:

Symfony\Component\Debug\Exception\ClassNotFoundException: 试图 从命名空间“MongoDB\BSON”加载类“ObjectID”。你忘了一个 另一个命名空间的“use”语句?

在供应商/alcaeus/mongo-php-adapter/lib/Mongo/MongoId.php:224

在 MongoId->createObjectID(null) (供应商/alcaeus/mongo-php-adapter/lib/Mongo/MongoId.php:41)

在 MongoId->__construct() (vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Id/AutoGenerator.php:34)

在 Doctrine\ODM\MongoDB\Id\AutoGenerator->generate(object(DocumentManager), 对象(产品)) (vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:1107)

在 Doctrine\ODM\MongoDB\UnitOfWork->persistNew(object(ClassMetadata), 对象(产品)) (vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:1710)

在 Doctrine\ODM\MongoDB\UnitOfWork->doPersist(object(Product), 数组('000000002ed55d6b00000000057952ca' => 对象(产品))) (vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php:1674)

在 Doctrine\ODM\MongoDB\UnitOfWork->persist(object(Product)) (vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentManager.php:412)

在 Doctrine\ODM\MongoDB\DocumentManager->persist(object(Product)) (src/Acme/StoreBundle/Controller/DefaultController.php:30)

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

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

在 Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1、真) (供应商/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:169)

在 Symfony\Component\HttpKernel\Kernel->handle(object(Request)) (web/app_dev.php:29)

在需要时('/var/www/html/geoservicesgrandnancy/web/app_dev.php') (供应商/symfony/symfony/src/Symfony/Bundle/WebServerBundle/Resources/router.php:42)

php --ri mongodb | grep version 输出:

MongoDB 扩展版本 => 1.3.2,libbson 捆绑版本 => 1.8.1, libmongoc 捆绑版本 => 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"
    },

【问题讨论】:

  • 您是否尝试过删除缓存并重新启动网络服务器?
  • @Mz1907 是的....
  • 你是否同时删除了 dev 和 prod 缓存?
  • @Mz1907 相信我,是的 xD 我做了所有显而易见的事情
  • @ASOlivieri 是的。 php --ri mongodb | grep 版本输出 MongoDB 扩展版本 => 1.3.2,libbson 捆绑版本 => 1.8.1,libmongoc 捆绑版本 => 1.8.1

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


【解决方案1】:

您好,您需要将 "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"
  }
  ...
}

【讨论】:

  • 感谢您的尝试,但我已经进行了设置,但它不起作用:) 我在 require 部分中没有 ext-mongodb,但添加它并不能纠正错误.我确实提供了。
  • 那是磨损我有一个项目,该配置工作得很好,它可能是您的版本或配置上的其他东西,也许扩展名没有正确启用仅用于 cli 的网络服务器
猜你喜欢
  • 1970-01-01
  • 2020-07-07
  • 2015-03-29
  • 2017-03-23
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多