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 Groimp使用疑问
  • ¥15 c++ 主窗口里面的菜单如何脱离主窗口
  • ¥15 MDK–ARM里一直找不到调试器
  • ¥15 oracle中sql查询问题
  • ¥15 vue使用gojs3.0版本,在nodeDataArray中的iconSrc使用gif本地路径,展示出来后动画是静态的,不是动态的
  • ¥100 代写个MATLAB代码,有偿
  • ¥15 ansys electronics 2021 R1安装报错,错误代码2,如图
  • ¥15 Dev-c++打字不出现中文,但出现日文
  • ¥30 搭建面包板由NE555N和SN74LS90N组成的计时电路时出了问题
  • ¥15 无源定位系统的时差估计误差标准差