Доктрина: Создание схемы (Псевдоним пространства имен Неизвестная сущность 'C'.) - PullRequest
1 голос
/ 26 февраля 2011

Я очень новичок в ORM и Доктрине, поэтому, пожалуйста, будьте терпеливы со мной.

Я более или менее следую учебному пособию по началу работы (просто с разными таблицами, чтобы сделать его более интересным). Я создал два файла YAML, определяющих мою схему, которая очень проста:

Пользователь:

User:
  type: entity
  table: users
  id:
    id:
      type: integer
      generator: AUTO
  fields:
    firstName:
      type: string
    lastName:
      type: string
    birthdate:
      type: datetime
    email:
      type: string
    username:
      type: string
    password:
      type: string
  oneToMany:
    pages:
      targetEntity: Page
      mappedBy: user

Страница:

Page:
  type: entity
  table: pages
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    name:
      type: string
    content:
      type: text
  manyToOne:
    user:
      targetEntity: User
      inversedBy: pages

Теперь я пытаюсь использовать SchemaTool для создания схемы базы данных. Когда я запускаю этот код:

$em = Zend_Registry::get('entityManager');
$tool = new \Doctrine\ORM\Tools\SchemaTool($em);
$classes = array(
    $em->getClassMetadata('Entities\User'),
    $em->getClassMetadata('Entities\Page')
);

Я получаю эту ошибку:

#0 C:\inetpub\wwwroot\zend\library\Doctrine\ORM\Configuration.php(150):
Doctrine\ORM\ORMException::unknownEntityNamespace('C')
#1
C:\inetpub\wwwroot\zend\library\Doctrine\ORM\Mapping\ClassMetadataFactory.php(155):
Doctrine\ORM\Configuration->getEntityNamespace('C')
#2 C:\inetpub\wwwroot\zend\library\Doctrine\ORM\EntityManager.php(247):
Doctrine\ORM\Mapping\ClassMetadataFactory->getMetadataFor('C:\inetpub\wwwr...')
#3
C:\inetpub\wwwroot\zend\application\modules\default\controllers\DoctrineUtilController.php(16):
Doctrine\ORM\EntityManager->getClassMetadata('C:\inetpub\wwwr...')
#4 C:\inetpub\wwwroot\zend\library\Zend\Controller\Action.php(513):
DoctrineUtilController->generateModelsAction()
#5 C:\inetpub\wwwroot\zend\library\Zend\Controller\Dispatcher\Standard.php(295):
Zend_Controller_Action->dispatch('generateModelsA...')
#6 C:\inetpub\wwwroot\zend\library\Zend\Controller\Front.php(954):
Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http),
Object(Zend_Controller_Response_Http))
#7 C:\inetpub\wwwroot\zend\application\Bootstrap.php(177):
Zend_Controller_Front->dispatch()
#8 C:\inetpub\wwwroot\zend\library\Zend\Application.php(366):
Bootstrap->run()
#9 C:\inetpub\wwwroot\zend\public\index.php(54): Zend_Application->run()
#10 {main}    
    $tool->createSchema($classes);

Есть идеи, где может быть проблема?


Дополнительная информация на всякий случай. Вот как я создаю менеджер сущностей в файле Bootstrap.php:

protected function _initDoctrine() {
    // (1)
    $config = new \Doctrine\ORM\Configuration();

    // Proxy Configuration (2)
    $config->setProxyDir(APPLICATION_PATH.'/proxies');
    $config->setProxyNamespace('Application\Proxies');
    $config->setAutoGenerateProxyClasses(('development' === APPLICATION_ENVIRONMENT));

    // Mapping Configuration (3)
    $driverImpl = new Doctrine\ORM\Mapping\Driver\XmlDriver(APPLICATION_PATH.'/configs/mappings/yml');
    $config->setMetadataDriverImpl($driverImpl);

    // Caching Configuration (4)
    if ('development' === APPLICATION_ENVIRONMENT) {
        $cache = new \Doctrine\Common\Cache\ArrayCache();
    } else {
        $cache = new \Doctrine\Common\Cache\ApcCache();
    }
    $config->setMetadataCacheImpl($cache);
    $config->setQueryCacheImpl($cache);

    // database configuration parameters (5)
    $conn = array(
        'driver' => $this->configuration->database->adapter,
        'user' => $this->configuration->database->username,
        'password' => $this->configuration->database->password,
        'dbname' => $this->configuration->database->dbname
    );

    // obtaining the entity manager (6)
    $evm = new Doctrine\Common\EventManager();
    $this->entityManager = \Doctrine\ORM\EntityManager::create($conn, $config, $evm);
    Zend_Registry::set('entityManager', $this->entityManager);
}

1 Ответ

1 голос
/ 27 февраля 2011

Кажется, что есть проблема с определениями пути.

Doctrine\ORM\Mapping\ClassMetadataFactory->getMetadataFor('C:\inetpub\wwwr...')

Это не должен быть абсолютный путь, так как Doctrine предполагает, что это имя класса с пространством имен, поэтому он принимает 'C: \ 'как пространство имен.

Так что это проблема с конфигурацией или автозагрузчиками.

В Doctrine есть песочница, включающая базовую рабочую конфигурацию, которую вы можете использовать в качестве отправной точки.

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