«Класс XXX не является допустимым объектом или сопоставленным суперклассом» после перемещения класса в файловой системе - PullRequest
81 голосов
/ 19 октября 2011

У меня был класс сущности в Aib \ PlatformBundle \ Entity \ User.php

У меня не было проблем при попытке создать класс формы через

php app / console доктрина: генерировать: форма AibPlatformBundle: пользователь

Теперь я изменил пространство имен на Aib \ PlatformBundle \ Entity \ Identity \ User, но когда я пытаюсь сгенерировать форму с помощью задачи, о которой я говорил ранее это говорит:

"Класс Aib \ PlatformBundle \ Entity \ User не является действительным объектом или сопоставлен супер класс. "

Это содержимое файла:

<?php
namespace Aib\PlatformBundle\Entity\Identity;

use Doctrine\ORM\Mapping as ORM;

    /**
     * Aib\PlatformBundle\Entity\Identity\User
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Aib\PlatformBundle\Entity\Identity
    \UserRepository")
     */
    class User
    {
    ...

Есть идеи?

symfony2.0.4

Ответы [ 11 ]

204 голосов
/ 15 марта 2012

Была эта проблема - не забудьте аннотацию * @ORM\Entity как показано ниже:

/**
 * Powma\ServiceBundle\Entity\User
 *
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
15 голосов
/ 03 сентября 2012

Была эта проблема вчера и нашел эту тему. Я создал сущность с сопоставлением в новом пакете (например, MyFooBundle / Entity / User.php), выполнил все настройки в соответствии с документацией, но при попытке загрузить приложение получил ту же ошибку сверху.

В итоге я понял, что не загружаю MyFooBundle в AppKernel:

new My\FooBundle\MyFooBundle()

Отличный способ отладки - запустить эту команду:

app/console doctrine:mapping:info
13 голосов
/ 16 июля 2012

Проверьте ваш файл config.yml, должен содержать что-то вроде этого:

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8
        types:
            json: Sonata\Doctrine\Types\JsonType

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        # auto_mapping: true
        entity_managers:
            default:
                mappings:
                    FOSUserBundle: ~
                    # ApplicationSonataUserBundle: ~
                    YourUserBundle: ~
                    SonataUserBundle: ~

Добавьте свой собственный пакет в список сопоставлений.

7 голосов
/ 18 октября 2014

Я решил это, передав false в качестве второго параметра Doctrine\ORM\Configuration::newDefaultAnnotationDriver.

Мне потребовалось некоторое время, чтобы копаться в Google и исходном коде.

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

Я реорганизовал устаревшие объекты, и они перестали работать.Раньше они использовали @Annotation вместо @ORM\Annotation, поэтому после рефакторинга метаданные просто не читались.Без использования простого считывателя аннотаций все выглядит хорошо.

7 голосов
/ 17 июля 2012

В моем случае проблема была решена путем изменения кэша моего сервера с eAccelerator на APC .Очевидно, eAccelerator удаляет все комментарии из файлов, что нарушает ваши аннотации.

6 голосов
/ 10 июля 2015

Я решил эту проблему, установив $useSimpleAnnotationReader=false при создании MetaDataConfiguration.

6 голосов
/ 09 октября 2013

большое спасибо Марку Фу и Могоману

Я знал, что это должно быть где-то в config.yml ... и был в состоянии проверить его на

app/console doctrine:mapping:info

действительно помогло!

На самом деле, эта команда просто останавливается на ошибке ... нет обратной связи, но когда все в порядке, вы сможете увидеть все свои объекты в списке.

3 голосов
/ 22 июня 2013

Я разрешил то же исключение, удалив конфликтующий автоматически сгенерированный файл orm.php в папке Resources / config / doctrine пакета; согласно документации: «Пакет может принимать только один формат определения метаданных. Например, невозможно смешивать определения метаданных YAML с аннотированными определениями класса сущностей PHP».

1 голос
/ 09 января 2013

Очень высокая вероятность того, что у вас PHP 5.3.16 (Symfony 2.x не будет работать с ним).В любом случае вам следует загрузить страницу проверки на http://you.site.name/config.php Если у вас не работал проект на хост-сервере, в config.php необходимо удалить следующие строки:

if (!in_array(@$_SERVER['REMOTE_ADDR'], array(
    '127.0.0.1',
    '::1',
))) {
    header('HTTP/1.0 403 Forbidden');
    exit('This script is only accessible from localhost.');
}

Goodluck!

0 голосов
/ 17 апреля 2019

В моем случае я был слишком ревностен во время рефакторинга и удалил файл доктрины yml!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...