[英]symfony 3 [Semantical Error] The annotation @Doctrine\ORM\Mapping\Model in class AppBundle\Entity\User does not exist, or could not be auto-loaded
[英]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.