2015-08-19 2 views
6

Я искал навсегда решение моей проблемы. Но я не могу найти решения.Symfony2 - Класс «X» не найден в цепочке имен, заданных цепочкой

Я всегда получаю сообщение об ошибке при попытке открыть домашнюю страницу:

Uncaught исключение 'Доктрина \ Common \ Постоянство \ Mapping \ MappingException' с сообщением 'Класс' Test \ Bundle \ UserBundle \ Entity \ Пользователь «не был найден в цепи сконфигурировано пространств имен» в ...

странная вещь, что я только получить его, когда у меня есть следующий URL:

http://localhost/

Но когда я запускаю его на этом URL я не получаю какие-либо ошибки, и моя страница отображается правильно:

http://localhost/app_dev.php

Моя конфигурация выглядит следующим образом (config.yml):

# Doctrine Configuration 
dbal: 
    default_connection: default 
    connections: 
    default: 
     driver: "%database_driver%" 
     host:  "%database_host%" 
     port:  "%database_port%" 
     dbname: "%database_name%" 
     user:  "%database_user%" 
     password: "%database_password%" 
     charset: UTF8 
    test: 
     driver: "%database_driver2%" 
     host:  "%database_host2%" 
     port:  "%database_port2%" 
     dbname: "%database_name2%" 
     user:  "%database_user2%" 
     password: "%database_password2%" 
     charset: UTF8 
orm: 
    default_entity_manager: default 
    entity_managers: 
    default: 
     connection: default 
     mappings: 
     TestUserBundle: 
      type: annotation 

И я называю Учение в моей таможенной службы, как это:

public function __construct(EntityManager $em) 
{ 
    $repositiory = $em->getRepository('Test\Bundle\UserBundle\Entity\User'); 
    $this->user = $repositiory->find($_SERVER['AUTH_USER']); 
} 

Мой Symfony Приложение работает на веб-сервере IIS.

Вы знаете, где я ошибся?

+2

Вы сделали «кэш приложений/консолей php: clear --env = prod'? – KhorneHoly

+0

Я пытался это сделать, но я получаю сообщение об ошибке, что я не могу переименовать каталог кэша «prod» – adiii4

+0

Затем перейдите в каталог 'app/cache/prod' и удалите все в этом каталоге. – KhorneHoly

ответ

5

Отображаемое имя TestUserBundle, но путь Test\Bundle\User\Bundle, не следует ли его называть TestBundleUserBundle? Кроме того, обычно mappings и auto_generate_proxy_classes установлены в true в режиме dev, что может объяснить, почему он работает там, а не в prod.

Возможно, вы захотите проверить documentation (Symfony 2.7), который показывает, как именно вы должны настраивать сопоставления в зависимости от вашего случая.

Пользовательские Mapping Сущности в Bundle

doctrine: 
    # ... 
    orm: 
     # ... 
     auto_mapping: true 
     mappings: 
      # ... 
      AppBundle: 
       type: xml 
       dir: SomeResources/config/doctrine 

Отображение объектов вне Bundle

doctrine: 
    # ... 
    orm: 
     # ... 
     mappings: 
      # ... 
      SomeEntityNamespace: 
       type: annotation 
       dir: "%kernel.root_dir%/../src/Entity" 
       is_bundle: false 
       prefix: App\Entity 
       alias: App 

И последнее, но не в последнюю очередь, всегда очистить свой каталог кэша после применения изменений в config.yml или файлов в app/config/.

Как указано в комментариях: Вам необходимо временно остановить любые процессы PHP, которые могут использовать каталог prod (т. Е. Если вы запустили консольный сервер: запустите) и повторите попытку. Если это не так, попробуйте this

+0

Поскольку мой Entity находится в каталоге Entity, и я использую аннотации, я мог бы использовать только auto_mapping, потому что моя конфигурация не где-то в другом месте? – adiii4

+0

Да, это должно быть так хорошо. У меня есть мои сущности в «App/MyBundle/Entity/EntityName», а в конфигурации у меня есть «auto_mapping: true» - работает как шарм. Однако вам все равно нужно очистить кеш после применения изменения. – tftd

+0

Да, я оставил его так, как сейчас, и теперь я очистил кеширование (после закрытия всех процессов php). Это работает как шарм. Не могли бы вы добавить к своему ответу, что вам нужно закрыть все процессы для очистки кеша производства? Тогда я могу принять ваш ответ. – adiii4

0

Оказалось, что моя ошибка заключалась в том, что я забыл добавить удаленные пакеты/пакеты в «vendor» внутри моего файла AppKernel.

Они не были зарегистрированы в функции "registerBundles".

Смежные вопросы