Symfony 4为实体映射配置"AppBundle"的正确方法



我正在遵循此文档,因为我想根据数据库中的表自动生成实体,并且在XML生成阶段,我将这一行传递php bin/console doctrine:mapping:import --force DoctrineMappingBundle xml。由于我没有AppBundle,我在src/Entity/创建了自己的DoctrineMappingBundle.php

我的 DoctrineMappingBundle.php 看起来像这样

namespace AppEntity;
use SymfonyComponentHttpKernelBundleBundle;
class DoctrineMappingBundle extends Bundle
{
}

它确实会生成 XML 文件,但是当我运行实体生成命令时

php bin/console doctrine:mapping:convert annotation ./src ,它会引发此错误

 In MappingException.php line 317:
 An error occurred in AppEntityEntityBlogComment

In AnnotationDriver.php line 60:
Class AppEntityEntityBlogComment does not exist

我卡在这一点上,我不知道为什么它无法生成实体类,它似乎会自动在命名空间中添加一个额外的Entity,但在我的命名空间中实体在命名空间中只提到一次。我不确定哪个配置导致了此问题。

我的src文件夹结构

src---------/
|--Controller/  
|--Entity--/
|-----DoctinemappingBundle.php 
|--Migrations/
|--Repository/ 
|--Kernel.php

首先,文档明确表示不再支持此功能,如果您阅读了 github 问题,您就会明白原因。

但是,该功能仍然存在,您使用假捆绑包的想法将起作用。 只需要映射包位于 src 目录中。 然后进行一些复制/粘贴。

以下是在 S4 下生成实体的完整分步方法。

// Install the software
mkdir mapping
cd mapping
composer create-project symfony/skeleton .
composer require orm-pack
// adjust DATABASE_URL in .env

为映射命令制作一个假捆绑包:

// src/DoctrineMappingBundle.php
namespace App;
use SymfonyComponentHttpKernelBundleBundle;
class DoctrineMappingBundle extends Bundle
{
}
// Add the bundle to config/bundles.php
AppDoctrineMappingBundle::class => ['dev' => true],

现在我们准备创建一些实体:

// Generate the xml mappings
bin/console doctrine:mapping:import DoctrineMappingBundle xml
// Mapping files generated under src/Resources/config/doctrine
// Generate the entities
php bin/console doctrine:mapping:convert annotation ./src

这将在 src/App/Entity 下生成实体。 此时,您需要将生成的实体复制到 src/实体,然后删除应用/实体目录。 命名空间应该已经正确。

通过删除 src/资源来摆脱映射文件。

这是我参加的练习,但你应该很高兴。

相关内容

最新更新