J'ai eu une classe d'entité dans Aib\PlatformBundle\Entity\User.php
Je n’ai eu aucun problème à essayer de créer sa classe de forme à travers
app doctrine/console php: générer: formulaire AibPlatformBundle: utilisateur
Maintenant, j'ai changé l'espace de nom en Aib\PlatformBundle\Entity\Identity\User, mais lorsque j'essaie de générer le formulaire avec la tâche que j'ai précédemment décrite, il indique:
"La classe Aib\PlatformBundle\Entity\User n'est pas une entité valide ni une super classe mappée."
Ceci est le contenu du fichier:
<?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
{
...
Une idée?
symfony2.0.4
Avait ce problème - n'oubliez pas l'annotation * @ORM\Entity
comme ci-dessous:
/**
* Powma\ServiceBundle\Entity\User
*
* @ORM\Entity
* @ORM\Table(name="users")
*/
Avait ce problème hier et a trouvé ce fil. J'ai créé l'entité avec le mappage dans un nouvel ensemble (par exemple, MyFooBundle/Entity/User.php), ai effectué toute la configuration en fonction de la documentation, mais j'ai obtenu la même erreur que ci-dessus lors de la tentative de chargement de l'application.
Finalement, j'ai réalisé que je ne chargeais pas MyFooBundle dans AppKernel:
new My\FooBundle\MyFooBundle()
Un excellent moyen de résoudre ce problème consiste à exécuter cette commande:
app/console doctrine:mapping:info
Vérifiez votre fichier config.yml, devrait contenir quelque chose comme ceci:
# 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: ~
Ajoutez votre propre lot à la liste des mappages.
Dans mon cas, le problème a été résolu en changeant le cache de mes serveurs de eAccelerator à APC . Apparemment, eAccelerator supprime tous les commentaires des fichiers, ce qui casse vos annotations.
J'ai résolu ce problème en mettant $useSimpleAnnotationReader=false
lors de la création de MetaDataConfiguration
.
J'ai résolu ceci en passant false
comme second paramètre à Doctrine\ORM\Configuration::newDefaultAnnotationDriver
.
Il m'a fallu un moment pour fouiller dans Google et le code source.
Mon cas était un peu spécial puisque j'utilisais un mappage pointant vers un autre répertoire non lié à l'installation de Symfony, car je devais également utiliser du code hérité.
J'avais refactorisé des entités héritées et elles ont cessé de fonctionner. Ils avaient l'habitude d'utiliser @Annotation
au lieu de @ORM\Annotation
, donc après le refactoring, il a simplement échoué à lire les métadonnées. En n'utilisant pas un simple lecteur d'annotation, tout semble aller pour le mieux.
grand merci à Mark Fu et mogoman
Je savais que ça devait être quelque part dans config.yml ... et pouvoir le tester contre la
app/console doctrine:mapping:info
vraiment aidé!
En fait, cette commande s'arrête simplement à une erreur ... pas de retour, mais quand tout va bien, vous devriez pouvoir voir toutes vos entités listées.
J'ai résolu la même exception en supprimant un fichier orm.php généré automatiquement et en conflit dans le dossier Resources/config/doctrine du bundle; Selon la documentation: "Un groupe ne peut accepter qu'un seul format de définition de métadonnées. Par exemple, il n'est pas possible de mélanger les définitions de métadonnées YAML avec des définitions annotées PHP)."
Très grande possibilité que vous ayez PHP 5.3.16 (Symfony 2.x ne fonctionnera pas avec cela). Quoi qu'il en soit, vous devez charger la page de contrôle sur http://votre site. name/config.php Si votre projet n'avait pas fonctionné sur le serveur d'hébergement, les lignes suivantes doivent être supprimées dans "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.');
}
Bonne chance!
Dans mon cas, j’étais trop zélé lors d’un refactor et j’avais supprimé un fichier doctrine yml!