Php Symfony2/Doctrine2尝试生成实体时出现无效映射文件异常
我有一个非常简单的数据库,我正试图从中导入和创建实体。条令(Symfony)能够从数据库生成YML映射文件。但当我再次尝试生成实体时,我得到以下错误:Php Symfony2/Doctrine2尝试生成实体时出现无效映射文件异常,php,symfony,doctrine-orm,mappingexception,Php,Symfony,Doctrine Orm,Mappingexception,我有一个非常简单的数据库,我正试图从中导入和创建实体。条令(Symfony)能够从数据库生成YML映射文件。但当我再次尝试生成实体时,我得到以下错误: [Doctrine\Common\Persistence\Mapping\MappingException] Invalid mapping file 'SandboxBundle.Entity.Product.orm.yml' for class 'SandboxBundle\Entity\Product'. yml文件在我看来很好,因为我们
[Doctrine\Common\Persistence\Mapping\MappingException]
Invalid mapping file 'SandboxBundle.Entity.Product.orm.yml' for class
'SandboxBundle\Entity\Product'.
yml文件在我看来很好,因为我们认为它是由条令生成的。为了确定这一点,我用一个在线的yml验证器检查了一下,验证器说一切正常。我用来尝试生成实体的命令是:
app/console generate:doctrine:entities sandbox
下面是.yml文件。请原谅由于粘贴此文件而导致的任何yml间距错误。正如我所说,yml文件是根据条令生成的,并且确实通过了在线验证
Product:
type: entity
table: product
indexes:
category_id:
columns:
- category_id
id:
id:
type: integer
nullable: false
unsigned: false
comment: ''
id: true
generator:
strategy: IDENTITY
fields:
productname:
type: string
nullable: true
length: 10
fixed: false
comment: ''
categoryId:
type: integer
nullable: true
unsigned: false
comment: ''
column: category_id
lifecycleCallbacks: { }
为了完整起见,这里是类别yml文件。错误发生在产品上,但我认为这是因为产品是先处理的
Category:
type: entity
table: category
id:
id:
type: integer
nullable: false
unsigned: false
comment: ''
id: true
generator:
strategy: IDENTITY
fields:
categoryname:
type: string
nullable: true
length: 50
fixed: false
comment: ''
lifecycleCallbacks: { }
我在web上搜索了与诊断映射异常有关的任何资源,但没有找到任何资源。我假设YML文件中有某种东西导致实体生成器阻塞。但是错误消息并没有说明这可能是什么。我看到有很多关于堆栈溢出的此类问题的实例。如果能够获得有关如何诊断这些类型错误的信息,从而能够自己解决这些问题,那将是一件非常棒的事情。中描述了:
YAML文件中指定的类名应该是完全限定的
因此,请尝试更改产品yaml定义,如下所示:
SandboxBundle\Entity\Product:
type: entity
table: product
indexes:
.....
在其他映射文件中执行相同操作
希望对您有所帮助使用
php应用程序/控制台原则:生成:实体
根据条令自动生成实体。
你用过
app/console原则:生成:实体entityName
我是说
app/console生成:条令:实体entityName
(注意复数“entities”一词)您的命令是生成现有实体的更新属性,并生成其getter和setter方法,但不生成实体
我的建议是:
SandboxBundle.Entity.Product.orm.yml
到
并确保在yaml中完全限定您的姓名
SandboxBundle\Entity\Product:
type: entity
table: product
indexes:
.....
您可能会因为双命名空间而出错。Symfony将文件的虚线部分添加到名称空间
[Doctrine\Common\Persistence\Mapping\MappingException]
Invalid mapping file 'SandboxBundle.Entity.SandboxBundle.Entity.Product.orm.yml' for class
'SandboxBundle\Entity\SandboxBundle\Entity\Product'.
祝你好运:)最近,我遇到了类似的“MappingException:Invalid mapping file”异常,使用以下代码:
//bootstrap.php
$config = Setup::createYAMLMetadataConfiguration(array(__DIR__ .
"/../config/dcm"), $isDevMode);
使用Symfony Yaml 2。*,一切正常。但是使用Symfony Yaml^3.3,我会得到无效映射文件异常。我追溯到不同的Yaml库解析函数是如何工作的。当使用条令解析yaml文件时,它将使用YamlDriver类,该类使用以下函数加载yaml文件:
// vendor/doctrine/orm/lib/Doctrine/Orm/Mapping/Driver/YamlDriver.php
protected function loadMappingFile($file)
{
return Yaml::parse($file);
}
在Yaml 2.*中,传递文件名字符串进行解析是没有问题的,但是在Yaml^3.3中,解析函数需要一个Yaml字符串。解决此问题的一些方法包括使用xml配置文件或编写自己的Yaml驱动程序,并通过绕过Setup::createYAMLMetadataConfiguration并使用以下代码获取配置:
$config = self::createConfiguration($isDevMode, $proxyDir, $cache);
$config->setMetadataDriverImpl(new \MyNamespace\YamlDriver($paths));
return $config;
Don,这不是一个解决方案,但您可以选择运行“生成实体”“使用“verbose”选项的命令。这将为您提供一个PHP堆栈转储,然后您可以开始深入研究条令代码,至少看看失败的地方。但是,我建议,如果您要开始在供应商代码中四处搜索,添加诊断性的“print_”语句等,那么您可以在专门为此目的创建的Symfony测试实例中执行此操作。这就是我所做的。不,即使我添加了完全限定名,仍然会得到相同的错误。正如我所说,这些YML文件是由条令生成的。但是谢谢你的努力。
$config = self::createConfiguration($isDevMode, $proxyDir, $cache);
$config->setMetadataDriverImpl(new \MyNamespace\YamlDriver($paths));
return $config;