我正在遵循此文档,因为我想根据数据库中的表自动生成实体,并且在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/资源来摆脱映射文件。
这是我参加的练习,但你应该很高兴。