我在Aib'PlatformBundle' entity 'User.php中有一个实体类
通过
创建它的表单类没有任何问题php app/console原则:generate:form AibPlatformBundle:User
现在我已经将名称空间更改为Aib'PlatformBundle'Entity'Identity'User,但是当我尝试使用我之前所说的任务生成表单时它说:
"Class 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")
*/
昨天有这个问题,发现这个线程。我在一个新的bundle(例如MyFooBundle/entity/User.php)中创建了映射的实体,根据文档做了所有的配置,但在尝试加载应用程序时得到了相同的错误。
最后我意识到我没有在AppKernel中加载MyFooBundle:
new My'FooBundle'MyFooBundle()
一个很好的调试方法是运行这个命令:
app/console doctrine:mapping:info
请检查配置。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: ~
将自己的bundle添加到映射列表中。
我通过在创建MetaDataConfiguration
时设置$useSimpleAnnotationReader=false
来解决这个问题。
我通过将false
作为第二个参数传递给Doctrine'ORM'Configuration::newDefaultAnnotationDriver
来解决这个问题。
我花了一些时间在Google和源代码中挖掘。
我的情况有点特殊,因为我使用了一个指向与Symfony安装无关的另一个目录的映射,因为我还必须使用遗留代码。
我重构了遗留实体,它们停止工作了。他们曾经使用@Annotation
而不是@ORM'Annotation
,所以在重构之后,它根本无法读取元数据。通过不使用简单的注释阅读器,一切似乎都没问题。
在我的情况下,问题是通过改变我的服务器缓存从eAccelerator到APC来解决的。显然,eAccelerator会从文件中删除所有破坏注释的注释。
感谢傅宇森和莫歌曼
我知道它必须在config.yml的某个地方…并且能够对照
进行测试app/console doctrine:mapping:info
真的帮助!
事实上,这个命令只是简单地停止在一个错误…没有反馈,但当一切都很好,你应该能够看到你所有的实体列出。
我通过删除bundle的Resources/config/doctrine文件夹中一个冲突的自动生成的orm.php文件来解决相同的异常;根据文档:"一个包只能接受一种元数据定义格式。例如,不可能将YAML元数据定义与带注释的PHP实体类定义混合使用。
非常有可能你有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.');
}
古德勒克!
- 实体必须有适当的实体和表注释(顺序可能很重要,所以尝试两者)
- 如果有自定义存储库,它必须通过实体类本身访问($entityManager->getRepository('你的实体类名')),因为通过存储库类名调用它会欺骗Doctrine认为Repo类必须是一个实体本身。很傻,但是教条并没有做出硬性区分。
我的错误是我做了
$em->getRepository(EntityRepository::class)
不是$em->getRepository(Entity::class)
在我的例子中,我在重构过程中太热心了,删除了一个doctrine yml文件!
在我的mac上,我使用src/MainBundle/Resource/Config/Doctrine,当然它在mac上工作,但它不能在生产Ubuntu服务器上工作。一旦将Config重命名为Config,将Doctrine重命名为Doctrine,就可以找到映射文件并开始工作。
在我的例子中,在制作make:entity之后,我尝试了以下命令
php bin/console doctrine:mapping:import "App'Entity" annotation --path=src/Entity
哪个从数据库生成实体然而,这个命令不提供getter和setter,如果你在控制器中使用它,或者你以后会使用它,它们会导致未知的方法错误(例如getId)。所以我决定回到从
php bin/console make:entity
所以我可以带回丢失的方法,但不幸的是,这导致我的错误类不是一个有效的实体或映射的超类。接下来,为了防止这个错误,我没有耐心阅读这个文档
[1]: https://www.doctrine-project.org/projects/doctrine-orm/en/2.11/tutorials/override-field-association-mappings-in-subclasses.html#override-field-association-mappings-in-subclasses特别是我在注释的地方使用属性,因此,我带回了生成的实体,只是添加了以下命令,生成getter和setter $ php bin/console make:entity --regenerate App
挽救了我的生命,虽然这解决了我的问题,但我没有弄清楚为什么在第一种情况下,它导致了我这个主题的错误
我摆脱了相同的错误信息,因为在你的情况下使用app/console_dev而不仅仅是app/console