繁体   English   中英

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

[英]Symfony 4 correct way to configure “AppBundle” for entity Mapping

我正在关注文档,因为我想根据数据库中的表自动生成实体,在XML生成阶段,我通过了php bin/console doctrine:mapping:import --force DoctrineMappingBundle xml这行代码。 由于我没有AppBundle ,因此我在src/Entity/创建了自己的DoctrineMappingBundle.php

我的DoctrineMappingBundle.php看起来像这样

namespace App\Entity;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class DoctrineMappingBundle extends Bundle
{
}

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

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

 In MappingException.php line 317:

 An error occurred in App\Entity\Entity\BlogComment

In AnnotationDriver.php line 60:
Class App\Entity\Entity\BlogComment 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 Symfony\Component\HttpKernel\Bundle\Bundle;

class DoctrineMappingBundle extends Bundle
{

}
// Add the bundle to config/bundles.php
App\DoctrineMappingBundle::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 / Entity,然后删除App / Entity目录。 名称空间应该已经正确。

通过删除src / Resources也摆脱映射文件。

这是我完成的练习,但您应该一切顺利。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM