"Class XXX is not a valid entity or mapped super class" after moving the class in the filesystem

PhpSymfonyDoctrine Orm

Php Problem Overview


I had an entity class in Aib\PlatformBundle\Entity\User.php

I had no problems trying to create its form class through

> php app/ console doctrine:generate:form AibPlatformBundle:User

Now I have change the namespace to Aib\PlatformBundle\Entity\Identity\User, but when I try to generate the form with the task I said before it says:

> "Class Aib\PlatformBundle\Entity\User is not a valid entity or mapped > super class."

This is the file content:

<?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
    {
    ...

Any idea?

symfony2.0.4

Php Solutions


Solution 1 - Php

Had this problem - don't forget the annotation * @ORM\Entity like below:

/**
 * Powma\ServiceBundle\Entity\User
 *
 * @ORM\Entity
 * @ORM\Table(name="users")
 */

Solution 2 - Php

Had this problem yesterday and found this thread. I created the entity with the mapping in a new bundle (e.g. MyFooBundle/Entity/User.php), did all the configuration according to the docs but got the same error from above when trying to load the app.

In the end I realized that I wasn't loading MyFooBundle in AppKernel:

new My\FooBundle\MyFooBundle()

A great way to debug this is to run this command:

app/console doctrine:mapping:info

Solution 3 - Php

Do check your config.yml file, should be containing something like this:

# 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: ~

Add your own bundle to the mappings list.

Solution 4 - Php

I resolved this issue by setting $useSimpleAnnotationReader=false when creating the MetaDataConfiguration.

Solution 5 - Php

I solved this by passing false as the second parameter to Doctrine\ORM\Configuration::newDefaultAnnotationDriver.

It took me a while of digging through Google and source code.

My case was sort of special since I was using a mapping pointing to another directory unrelated to the Symfony installation as I also had to use legacy code.

I had refactored legacy entities and they stopped working. They used to use @Annotation instead of @ORM\Annotation, so after refactoring it simply failed to read the metadata. By not using a simple annotation reader, everything seems to be okayish.

Solution 6 - Php

In my case the problem was solved by changing my servers cache from eAccelerator to APC. Apparently eAccelerator strips all the comments from files which breaks your annotations.

Solution 7 - Php

big thx to Mark Fu and mogoman

I knew it had to be somewhere in the config.yml... and being able to test it against the

app/console doctrine:mapping:info

really helped!

In fact, this command just simply stops at an error... no feedback, but when everything is fine you should be able to see all your entities listed.

Solution 8 - Php

I resolved the same exception by deleting a conflicting autogenerated orm.php file in the bundle's Resources/config/doctrine folder; according to the documentation: "A bundle can accept only one metadata definition format. For example, it's not possible to mix YAML metadata definitions with annotated PHP entity class definitions."

Solution 9 - Php

Very high possibility that you have PHP 5.3.16 (Symfony 2.x will not work with it). Anyway you should load check page on http://you.site.name/config.php If you had project not worked on hosting server, next lines must be removed in "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!

Solution 10 - Php

  1. Entity must have proper Entity and Table annotations (order may matter so try both)
  2. If there is custom repository it MUST be accessed via Entity class itself ($entityManager->getRepository('your ENTITY class name')), as calling it via Repository class name will trick Doctrine into thinking Repo class must be an entity itself. Silly, but Doctrine does not make hard distinction.

Solution 11 - Php

My mistake was I was doing

$em->getRepository(EntityRepository::class)

instead of

$em->getRepository(Entity::class)

Solution 12 - Php

In my case, I was too zealous during a refactor and had deleted a doctrine yml file!

Solution 13 - Php

In my case on my mac I was using src/MainBundle/Resource/Config/Doctrine, of course it worked on Mac but it didn't work on production Ubuntu server. Once renamed Config to config and Doctrine to doctrine, the mapping files were found and it started working.

Solution 14 - Php

In my case after making make:entity i tried the following command

php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity which generates the entity from the database However, this Command don t provide the getters and setters that will cause you unknown method error (getId for example) if you are using it inside a controller or you ll use it later So i decided to go back to the generated entity from the

php bin/console make:entity

so i can bring back the missing methods but unfortunately this caused me the error class is not a valid entity or mapped superclass. next to prevent this error i haven 't patience to read this documentation

[1]: https://www.doctrine-project.org/projects/doctrine-orm/en/2.11/tutorials/override-field-association-mappings-in-subclasses.html#override-field-association-mappings-in-subclasses especially i m using attributes in the place of annotation, therefore i brought back the generated entity and just adding the following command which generates getters and setters $ php bin/console make:entity --regenerate App saved my life ,though this solved my problem but i didn t figure out why in the first case it caused me the error of this topic

Solution 15 - Php

I got rid of the same error message as in your case by using app/console_dev instead of just app/console

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionziiwebView Question on Stackoverflow
Solution 1 - PhpMikeView Answer on Stackoverflow
Solution 2 - PhpmogomanView Answer on Stackoverflow
Solution 3 - PhpMark FuView Answer on Stackoverflow
Solution 4 - PhpgruenteeView Answer on Stackoverflow
Solution 5 - PhpwucdbmView Answer on Stackoverflow
Solution 6 - PhpChristian VermeulenView Answer on Stackoverflow
Solution 7 - PhpMediaVinceView Answer on Stackoverflow
Solution 8 - PhpCartesian TheaterView Answer on Stackoverflow
Solution 9 - PhpStanislav TerletskyiView Answer on Stackoverflow
Solution 10 - Phpprzemo_liView Answer on Stackoverflow
Solution 11 - PhpgvlasovView Answer on Stackoverflow
Solution 12 - PhpjhchncView Answer on Stackoverflow
Solution 13 - PhprashidkhanView Answer on Stackoverflow
Solution 14 - PhpNoor HaView Answer on Stackoverflow
Solution 15 - PhpmediafreakchView Answer on Stackoverflow