我正在使用Flex测试新的Symfony 4模式,在创建Doctrine实体或创建实体实体时遇到了很大的麻烦。
在以前版本的Symfony中,您可以使用以下命令创建实体:
php bin/console doctrine:generate:entities
和
php bin/console doctrine:generate:entities App:MyBundle:MyEntity
在这个版本(带有新Flex骨架的Symfony 3.3-dev(中,新的文件夹结构"删除"了旧的捆绑包结构,当执行上述命令以创建实体时,它会./src/Entity
返回如下错误:
[运行时异常] 找不到"App\Entity\ExampleEntity"的基本路径(路径
:"/mnt/c/.../src/Entity",目标:"/mnt/c/.../src/Entity"(。
问题是,这是生成实体的任何方法,或者专注于路径而不是使用 PSR-4 自动加载指令的实体实体。
提前谢谢!!
无论如何都不是修复,而是在他们赶上之前的一种解决方法。非常牛仔的方法。
- 使用标准的Symfony文件结构设置一个新项目。
- 将基本对象复制到实体文件夹中。
- 在那里生成授权
php bin/console doctrine:generate:entities AppBundle
- 将它们复制并粘贴到新的Symfony Flex项目实体文件夹中。
- 使用 IDE 在带有应用程序的AppBundle的文件夹中进行查找和替换
抱歉,这远非理想,但我找到的最简单的方法,而不必手动生成所有 getter/setter。
<小时 />更新: 25/01/2017
从4.x开始,doctrine:generate:entities
的整个想法已被删除(在长时间阅读之后的这个问题中,您会注意到Doctrine已经完全删除了命令,因此新的Symfony制造商捆绑包(。
显然,这被视为不好的做法。相反,他们发布了一个名为 maker 的新包,它本质上是为您创建实体类,但没有 getter/setter,新的建议做法是依靠您的 IDE 为您自动生成 Getter 和 setter。
除了ArrayCollections
的构造函数外,这都可以工作@OneToMany
,但手动添加这些不需要太多。
我上面所说的也反映在Symfony文档中。
生成切特和设置器
Doctrine 现在知道如何将 Product 对象持久化到数据库。 但是类本身还没有用。所有属性都是 私有,因此无法在它们上设置数据!
出于这个原因,您应该为所有人创建公共获取者和设置者 需要从类外部修改的字段。如果您使用 IDE就像PhpStorm一样,它可以为你生成这些。在 PhpStorm 中,将 将光标放在类中的任何位置,然后转到代码 ->生成 菜单并选择"盖特和二传":
我遇到了同样的问题。这是另一种解决方案。
暂时更改 Doctrine\Bundle\DoctrineBundle\Mapping:getBasePathForClass
后
$namespace = str_replace('\', '/', $namespace);
加:
$namespace = str_replace('App/', '', $namespace);
实体将在 src/App/Entity/中创建。复制粘贴后,删除 src/App。