douchuanchai2793 2016-11-03 16:02
浏览 91
已采纳

Symfony + MongoDB驱动程序问题

I'm following this tutorial, but Symfony doesn't seem to find the MongoId class.

{
    "message": "Attempted to load class \"MongoId\" from the global namespace.
Did you forget a \"use\" statement?",
    "class": "Symfony\\Component\\Debug\\Exception\\ClassNotFoundException",
    "trace": [
      {
        "namespace": "",
        "short_class": "",
        "class": "",
        "type": "",
        "function": "",
        "file": "/home/local/BROCELIA/kha/dev/symfonyTraining/rest/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Id/AutoGenerator.php",
        "line": 34,
        "args": []
      },
      ...
    ]
}

Here's my Document:

<?php

namespace Acme\StoreBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 * @MongoDB\Document
 */
class Product
{
/**
 * @MongoDB\Id
 */
protected $id;

/**
 * @MongoDB\Field(type="string")
 */
protected $name;

/**
 * @MongoDB\Field(type="float")
 */
protected $price;

public function getId() {
    return $this->id;
}

public function setName($name) {
    $this->name = $name;
    return $this;
}

public function getName() {
    return $this->name;
}

public function setPrice($price) {
    $this->price = $price;
    return $this;
}

public function getPrice() {
    return $this->price;
}
}

And here's my Controller: (NB: I'm using PhPStorm and it doesn't seem to find the persist() and flush() methods either. Don't know how it could be related though).

    <?php
    namespace Acme\StoreBundle\Controller;

    use Acme\StoreBundle\Document\Product;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\Response;

    class DefaultController extends Controller
    {
        public function indexAction()
        {
            return $this->render('AcmeStoreBundle:Default:index.html.twig');
        }


        public function createAction()
        {
            $product = new Product();
            $product->setName('A Foo Bar');
            $product->setPrice('19.99');
            $dm = $this->get('doctrine_mongodb')->getManager();
            $dm->persist($product);
            $dm->flush();
            return new Response('Created product id '.$product->getId());
        }
    }

My php version being PHP 7.0.8-0ubuntu0.16.04.3 (cli) ( NTS ). I installed the php MongoDB driver through pecl. I also added extension=mongodb.so at the end of my php.ini (I had two of these: /etc/php/7.0/cli/php.ini and /etc/php/7.0/fpm/php.ini, I added it in both). php -r "phpinfo();" | grep "mongo" outputs this:

mongodb
mongodb support => enabled
mongodb version => 1.1.9
mongodb stability => stable
libmongoc version => 1.3.6
mongodb.debug => no value => no value

So I'm guessing the driver is installed. Although there's no such thing as mongodb.ini (or even mongo.ini) in the output of php --ini;

Configuration File (php.ini) Path: /etc/php/7.0/cli
Loaded Configuration File:         /etc/php/7.0/cli/php.ini
Scan for additional .ini files in: /etc/php/7.0/cli/conf.d
Additional .ini files parsed:      
/etc/php/7.0/cli/conf.d/10-mysqlnd.ini,
... Lots of .ini but nothing mongo-related.

4 hours and still no idea of where I messed up. I tried and reinstalled the mongodb driver, php and pecl several times, in vain. The other posts on SO asking for this seem to have fixed their issues by a simple reinstall of the driver. Sadly wasn't my case, plus I'm new into symfony.

  • 写回答

2条回答 默认 最新

  • douyi1341 2016-11-04 08:46
    关注

    While trying to run composer require doctrine/mongodb-odm doctrine/mongodb-odm-bundle, composer was red-angry, telling me I don't have the mongodb extension. Although I have it, it seems that doctrine/mongodb requires ext-mongo and not mongodb. ext-mongo only works for php versions <= 5.6. Seems like this package might be able to do the trick though.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀