【问题标题】:Symfony 4 correct way to configure "AppBundle" for entity MappingSymfony 4 为实体映射配置“AppBundle”的正确方法
【发布时间】:2018-04-06 11:50:40
【问题描述】:

我正在关注this 文档,因为我想根据我的数据库中的表自动生成实体,并且在 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

【问题讨论】:

    标签: php symfony doctrine symfony4


    【解决方案1】:

    首先,文档明确指出不再支持此功能,如果您阅读github issue,您就会明白原因。

    但是,功能仍然存在,您使用假包的想法将奏效。只需要将映射包放在 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 来摆脱映射文件。

    这是我完成的练习,但你应该很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      相关资源
      最近更新 更多