symfony 2: Пространство имен «Acme» не содержит сопоставленных объектов

Я следую за книгой и на странице http://symfony.com/doc/current/book/doctrine.html

Следуя за книгой, я пытаюсь работать над отношением таблицы товаров и категорий, а команда генерации доктрины дает мне следующую ошибку.

php app/console doctrine:generate:entities Acme Generating entities for namespace "Acme" [RuntimeException] Namespace "Acme" does not contain any mapped entities. doctrine:generate:entities [--path="..."] [--no-backup] name 

Спасибо

С

 doctrine:generate:entity 

вы создадите новый объект.

И когда вы добавляете некоторые атрибуты вручную

 doctrine:generate:entities AcmeDemoBundle:User 

вы создадите все accessor (getter и setter) объекта User of AcmeDemoBundle

Эта ошибка также возникнет, если ваши проекты (только?) Entity ошибочно именуются. Если вы запустите команду

 $ php app/console doctrine:generate:entities MyBundle 

и он вызывает ошибку

[RuntimeException]
Пакет «MyBundle» не содержит сопоставленных объектов.

Проверьте более конкретную команду ….

 $ php app/console doctrine:generate:entities MyBundle:MyEntity 

И посмотрим, получится ли ошибка:

[RuntimeException]
Автозагрузчик ожидает, что класс «MyBundle \ Entity \ MyEntity» будет определен в файле «/path/to/MyBundle/Entity/MyEntity.php». Файл был найден, но класс не был в нем, имя класса или пространство имен, вероятно, имеет опечатку.

Если это так, то тогда ошибка говорит сама за себя (надеюсь) и имя пространства имен / классов должно быть исправлено. Надеюсь, это полезно кому-то.

Решение:

Обновление файлов symfony:

 composer update 

затем создавать объекты

 php bin/console doctrine:generate:entities BackendBundle 

В книге http://symfony.com/doc/current/book/doctrine.html объект Porduct создан вручную. Вы написали код в Product.php. Вся информация о полях сущностей содержится в аннотациях .
Но категория объектов была создана с помощью

php app/console doctrine:generate:entity --entity="AcmeStoreBundle:Category" --fields="name:string(255)"

Автоматически сгенерированный объект Caterory.php не содержит аннотаций . Symfony хранит информацию в «Acme \ StoreBundle \ Resources \ config \ doctrine \ Category.orm.yml». Вот почему php app/console doctrine:mapping:info говорит, что у вас есть только 1 сопоставленная сущность – Категория.

Решение
Вы можете создать объект Product с doctrine:generate:entity
или
Вручную добавьте информацию об объекте Product в «Acme \ StoreBundle \ Resources \ config \ doctrine \ Category.orm.yml"
или
Удалить «Acme \ StoreBundle \ Resources \ config \ doctrine \ Category.orm.yml» и описать объект категории с аннотациями в Category.php

Убедитесь, что открытия PHP и (необязательные) закрывающие теги

 <?php 

а также

 ?> 

верны в вашем файле.

Они не включаются при копировании пасты из учебника по адресу http://symfony.com/doc/current/book/doctrine.html.

Я застрял в той же проблеме. Посмотрев на этот пост, я начал задаваться вопросом, почему подсветка синтаксиса была нарушена, и обнаружил, что теги открытия и закрытия отсутствуют. Ошибка исчезла, когда теги были включены.

Проблема может быть одной из двух вещей,

  1. убедитесь, что у вас есть оператор использования вверху, то есть

    use Acme\StoreBundle\Entity\Product;

    Он не включен в пример, они только отображают use Doctrine\Common\Collections\ArrayCollection;

  2. При указании целевого объекта всегда указывается полное пространство имен, если сущности находятся в разных пространствах имен. пример:

    @ORM\OneToMany(targetEntity="Acme\StoreBundle\Entity\Product", mappedBy="category")

    вместо:

    @ORM\OneToMany(targetEntity="Product", mappedBy="category")

    Второй работает только в том случае, если два объекта находятся в одном пространстве имен, и этот объект был вызван с use инструкции над классом.

У меня лично была ошибка, потому что я отсутствовал в папке / каталоге «Сущность».