2 votes

Annotations / Mapping Symfony2 et MongoDB non reconnus

J'ai suivi les étapes décrites dans le livre de recettes . Mais quand je lance doctrine:mapping:info o doctrine:generate:entities La doctrine ignore mon dossier.

Voici le code, peut-être que quelqu'un a un conseil à donner.

autoload.php

use Doctrine\Common\Annotations\AnnotationRegistry;
use Composer\Autoload\ClassLoader;

/**
 * @var $loader ClassLoader
 */
$loader = require __DIR__.'/../vendor/autoload.php';

AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

use Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver;
AnnotationDriver::registerAnnotationClasses();

return $loader;

compositeur.json

"doctrine/orm": ">=2.2.3,<2.4-dev",
"doctrine/mongodb-odm": "1.0.*@dev",
"doctrine/mongodb-odm-bundle": "3.0.*@dev",
"doctrine/doctrine-bundle": "1.2.*",
"doctrine/doctrine-fixtures-bundle": "dev-master",
"doctrine/doctrine-migrations-bundle": "dev-master",

config.yml :

doctrine_mongodb:
    connections:
        default:
            server: mongodb://localhost:27017
            options: {}
    default_database: test_database
    document_managers:
        default:
            auto_mapping: true

entité :

<?php
// src/Acme/StoreBundle/Document/Product.php
namespace Anchorbrands\Bundle\LandingpageBundle\Entity;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

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

/**
* @MongoDB\String
*/
protected $name;

/**
* @MongoDB\Float
*/
protected $price;
}

3voto

nifr Points 17866

Mauvais espace de noms/dossier :)

namespace Anchorbrands\Bundle\LandingpageBundle\Entity;

devrait être

namespace Anchorbrands\Bundle\LandingpageBundle\Document;

Les documents se trouvent généralement dans le Document dossier.

Entité Le dossier/espace de nom est pour ORM pas ODM.

Jetez un coup d'œil à la documentation aquí .

Mauvaise commande

pour mongodb / doctrine odm vous devez utiliser ...

app/console doctrine:mongodb:generate:documents AnchorbrandsLandingpageBundle

... alors que doctrine:generate:entities est pour la doctrine orm.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X