Symfony5/Doctrine 找不到我的实体的 XML 映射文件
Symfony5/Doctrine can't find my XML mapping file for my entity
我目前正在尝试使用 Doctrine 和 XML 映射从头开始建立一个 Symfony 5 项目。
我用一些实体创建了一个简单的 AppBundle。尝试生成迁移后,出现此错误:
No mapping file found named 'User.orm.xml' for class 'App\Entity\User\User'.
快速 google 搜索告诉我它可能与注释冲突(我不使用并且找不到任何事件)。
我觉得我错过了一些非常简单的东西,我需要帮助。
我的实体:
<?php
namespace App\Entity\User;
final class User implements UserInterface
{
use IdentifiableTrait;
private string $name;
private Collection $tasks;
public function __construct()
{
$this->tasks = new ArrayCollection();
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): UserInterface
{
$this->name = $name;
return $this;
}
public function getTasks(): Collection
{
return $this->tasks;
}
public function addTask(TaskInterface $task): UserInterface
{
if (!$this->tasks->contains($task)) {
$this->tasks->add($task);
$task->setUser($this);
}
return $this;
}
public function removeTask(TaskInterface $task): UserInterface
{
if ($this->tasks->contains($task)) {
$this->tasks->removeElement($task);
}
return $this;
}
}
我的User.orm.xml文件(位置:config/doctrine/User/):
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="App\Entity\User\User" table="users">
<id name="id" type="integer" column="id"/>
<field name="name" column="name"/>
</entity>
</doctrine-mapping>
我的 config/packages/doctrine.yaml 文件:
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
orm:
mappings:
App:
is_bundle: false
type: xml
dir: '%kernel.project_dir%/config/doctrine'
我真的不明白我错过了什么。
此致,
牟科
编辑:阅读@cerad 评论后,我决定删除捆绑部分,只使用 SF5 新文件架构。问题仍然存在。请注意,如果我更改 User.orm.xml 的名称(例如,user.orm.xml),它会检测到它并根据名称更改错误(user.orm.xml 的大小写不匹配)
找到问题。
首先,感谢@cerad 关于捆绑包的建议。
关于我的问题,我想将我的实体分类到子文件夹中:Entity/User/User.php。该子文件夹是问题所在。我一删除它(class 和 orm.xml 文件),它就起作用了。
谢谢大家
我通过在配置中添加另一个 'prefix' 密钥来在我的项目中修复它。
示例
prefix: 'App\Account\Domain'
我目前正在尝试使用 Doctrine 和 XML 映射从头开始建立一个 Symfony 5 项目。
我用一些实体创建了一个简单的 AppBundle。尝试生成迁移后,出现此错误:
No mapping file found named 'User.orm.xml' for class 'App\Entity\User\User'.
快速 google 搜索告诉我它可能与注释冲突(我不使用并且找不到任何事件)。
我觉得我错过了一些非常简单的东西,我需要帮助。
我的实体:
<?php
namespace App\Entity\User;
final class User implements UserInterface
{
use IdentifiableTrait;
private string $name;
private Collection $tasks;
public function __construct()
{
$this->tasks = new ArrayCollection();
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): UserInterface
{
$this->name = $name;
return $this;
}
public function getTasks(): Collection
{
return $this->tasks;
}
public function addTask(TaskInterface $task): UserInterface
{
if (!$this->tasks->contains($task)) {
$this->tasks->add($task);
$task->setUser($this);
}
return $this;
}
public function removeTask(TaskInterface $task): UserInterface
{
if ($this->tasks->contains($task)) {
$this->tasks->removeElement($task);
}
return $this;
}
}
我的User.orm.xml文件(位置:config/doctrine/User/):
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="App\Entity\User\User" table="users">
<id name="id" type="integer" column="id"/>
<field name="name" column="name"/>
</entity>
</doctrine-mapping>
我的 config/packages/doctrine.yaml 文件:
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
orm:
mappings:
App:
is_bundle: false
type: xml
dir: '%kernel.project_dir%/config/doctrine'
我真的不明白我错过了什么。
此致, 牟科
编辑:阅读@cerad 评论后,我决定删除捆绑部分,只使用 SF5 新文件架构。问题仍然存在。请注意,如果我更改 User.orm.xml 的名称(例如,user.orm.xml),它会检测到它并根据名称更改错误(user.orm.xml 的大小写不匹配)
找到问题。
首先,感谢@cerad 关于捆绑包的建议。
关于我的问题,我想将我的实体分类到子文件夹中:Entity/User/User.php。该子文件夹是问题所在。我一删除它(class 和 orm.xml 文件),它就起作用了。
谢谢大家
我通过在配置中添加另一个 'prefix' 密钥来在我的项目中修复它。
示例
prefix: 'App\Account\Domain'