Uncaught исключение на Doctrine 2.2 при вставке новой записи в базу данных - PullRequest
0 голосов
/ 04 марта 2012

У меня странная проблема с Доктриной 2.2. Я попытался вставить новую запись в базу данных, и я столкнулся со следующей проблемой. Что это значит и как я могу решить?

Fatal error: Uncaught exception 'Doctrine\ORM\Mapping\MappingException' with message 'Class Model\User is not a valid entity or mapped super class.' in C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\Mapping\MappingException.php:147
Stack trace: 
#0 C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\Mapping\Driver\AnnotationDriver.php(166): Doctrine\ORM\Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass('Model\User')
#1 C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\Mapping\ClassMetadataFactory.php(293): Doctrine\ORM\Mapping\Driver\AnnotationDriver->loadMetadataForClass('Model\User', Object(Doctrine\ORM\Mapping\ClassMetadata))
#2 C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\Mapping\ClassMetadataFactory.php(178): Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata('Model\User')
#3 C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\EntityManager.php(271): Doctrine\ORM\Mapping\ClassMetadataFactory->getMe in C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\Mapping\MappingException.php on line 147

Структура моего проекта выглядит следующим образом:

. / Тест

DoctrineORM /

DoctrineORM / бен

DoctrineORM / бен / Учение

Модель /

Модель / User.php

test.php

И, наконец, это мои коды в test.php и Model / User.php

--- Model/User.php ---
<?php
//    Model File model/User.php 
namespace Model;

/** @Entity @Table(name="users") */
class User
{
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    public $id;


   /** @Column(type="string", length=50) */
    public $name;


  /** @Column(type="integer", length=50) */
    public $age;
}
?>

И последние коды находятся в test.php

<?php
////    test.php


require 'DoctrineORM/Doctrine/Common/ClassLoader.php';
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', 'DoctrineORM');
$classLoader->register(); 

$classloader = new \Doctrine\Common\ClassLoader('model', __DIR__);
$classloader->register();

$config = new \Doctrine\ORM\Configuration();
$cache = new \Doctrine\Common\Cache\ArrayCache();
$config->setMetadataCacheImpl($cache);
$config->setQueryCacheImpl($cache);

$driverImpl = $config->newDefaultAnnotationDriver('model');
$config->setMetadataDriverImpl($driverImpl);
$config->setProxyDir('proxies');
$config->setProxyNamespace('proxies');

$config->setAutoGenerateProxyClasses(true);
$config->getAutoGenerateProxyClasses();

$connectionOptions = array(
    'driver' => 'pdo_mysql',
    'dbname' => 'test',
    'user' => 'root',
    'password' => '0000'
);

$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config);



//    insert a new User to DB
$user = new model\User();
$user->name = 'lorem impum user';
$user->age = 55;
$em->persist($user);
$em->flush(); 

1 Ответ

0 голосов
/ 05 марта 2012

Даже в Windows важна чувствительность к регистру.Используйте «Model» вместо «model» в вашем коде.

Добавьте «use Model / User;»в начало вы тестируете код и затем используете '$ user = new User ()';Это проверит, что ваш загрузчик классов работает.

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

...