У меня был класс сущностей в Aib\PlatformBundle\Entity\User.php
У меня не было проблем с попыткой создать класс формы через
php app/console doctrine: generate: form AibPlatformBundle: Пользователь
Теперь я изменил пространство имен на Aib\PlatformBundle\Entity\Identity\User, но когда я попытаюсь сгенерировать форму с заданием, которое я сказал ранее он говорит:
"Класс Aib\PlatformBundle\Entity\User не является допустимым сущностью или сопоставлен суперкласс".
Это содержимое файла:
<?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
{
...
Любая идея?
symfony2.0.4
Если бы эта проблема - не забывайте аннотацию * @ORM\Entity
, как показано ниже:
/**
* Powma\ServiceBundle\Entity\User
*
* @ORM\Entity
* @ORM\Table(name="users")
*/
У этой проблемы вчера была и эта тема. Я создал объект с отображением в новом пакете (например, MyFooBundle/Entity/User.php), выполнил всю конфигурацию в соответствии с документами, но получил ту же самую ошибку при попытке загрузить приложение.
В конце я понял, что я не загружал MyFooBundle в AppKernel:
new My\FooBundle\MyFooBundle()
Отличный способ отладки - запустить эту команду:
app/console doctrine:mapping:info
Проверьте файл config.yml, должен содержать следующее:
# 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: ~
Добавьте свой собственный пакет в список сопоставлений.
В моем случае проблема была решена путем изменения кеша серверов от eAccelerator до APC. Очевидно, eAccelerator удаляет все комментарии из файлов, которые разбивают ваши аннотации.
opcache.save_comments=1
, может быть, есть и для eAccelerator / APC?
big спасибо Марку Фу и магоману
Я знал, что это должно быть где-то в config.yml... и быть в состоянии проверить его на
app/console doctrine:mapping:info
действительно помог!
Фактически, эта команда просто останавливается при ошибке... нет обратной связи, но когда все в порядке, вы должны иметь возможность видеть все перечисленные сущности.
Я решил это, передав false
в качестве второго параметра Doctrine\ORM\Configuration::newDefaultAnnotationDriver
.
Мне потребовалось некоторое время, чтобы перекопать через Google и исходный код.
Мой случай был особенным, поскольку я использовал сопоставление, указывающее на другой каталог, не имеющий отношения к установке Symfony, поскольку мне также пришлось использовать устаревший код.
Я переработал устаревшие объекты, и они перестали работать. Раньше они использовали @Annotation
вместо @ORM\Annotation
, поэтому после рефакторинга просто не удалось прочитать метаданные. Не используя простой читатель аннотаций, все выглядит нормально.
Я разрешил одно и то же исключение, удалив конфликтный автогенерированный файл orm.php в папке Resources/config/doctrine; в соответствии с документацией: "Пакет может принимать только один формат определения метаданных. Например, невозможно сопоставить определения метаданных YAML с аннотированными определениями сущности класса PHP".
Я решил эту проблему, установив $useSimpleAnnotationReader=false
при создании MetaDataConfiguration
.
Очень высокая вероятность того, что у вас PHP 5.3.16 (Symfony 2.x не будет работать с ним). В любом случае вы должны загрузить страницу проверки http://you.site.name/config.php Если проект не работал на сервере хостинга, следующие строки должны быть удалены в "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.');
}
Гудлак!
Я избавился от того же сообщения об ошибке, что и в вашем случае, используя app/console_dev, а не только приложение/консоль