1

我正在使用 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),新的文件夹结构“移除”了旧的 Bundle 结构,当执行上述命令在其中创建实体时,./src/Entity会返回如下错误:

[RuntimeException] 找不到“App\Entity\ExampleEntity”的基本路径(路径:“/mnt/c/.../src/Entity”,目标:“/mnt/c/.../src/Entity ”)。

问题是,这是生成实体的任何方式,或者是专注于路径而不是 PSR-4 自动加载指令的实体实体。

提前致谢!!!

4

2 回答 2

3

无论如何都不是解决方法,而是一种解决方法,直到他们赶上来。非常牛仔的方法。

  1. 使用标准 Symfony 文件结构设置一个新项目。
  2. 将您的基本对象复制到实体文件夹中。
  3. 在那里生成权利php bin/console doctrine:generate:entities AppBundle
  4. 将它们复制并粘贴到新的 Symfony Flex 项目实体文件夹中。
  5. 使用 IDE 在AppBundle的文件夹中查找并替换为App

抱歉,这远非理想,但我找到了最简单的方法,而不必手动生成所有 getter/setter。


更新:25/01/2017

从 4.x 开始,整个想法doctrine:generate:entities 都被放弃了(在这个问题中,经过长时间阅读,你会注意到 Doctrine 已经完全放弃了命令,因此新的 Symfony 制造商包)。

显然,这被视为不好的做法。相反,他们发布了一个名为 maker 的新包,它实质上为您创建了实体类,但没有 getter/setter,新建议的做法是依靠您的 IDE 为您自动生成 Getter 和 Setter。

除了 for 的构造函数之外,这都有效ArrayCollections@OneToMany但手动添加这些并不需要太多。

我上面所说的也反映在Symfony 文档中。

生成 Getter 和 Setter

Doctrine 现在知道如何将 Product 对象持久化到数据库中。但是这个类本身还没有用。所有属性都是私有的,因此无法在它们上设置数据!

因此,您应该为需要从类外部修改的所有字段创建公共 getter 和 setter。如果您使用像 PhpStorm 这样的 IDE,它可以为您生成这些。在 PhpStorm 中,将光标放在类中的任意位置,然后转到 Code -> Generate 菜单并选择“Getters and Setters”:

于 2017-10-03T07:42:53.960 回答
1

我有同样的问题。这是另一个解决方案。

暂时更改 Doctrine\Bundle\DoctrineBundle\Mapping:getBasePathForClass

$namespace = str_replace('\\', '/', $namespace);

添加:

$namespace = str_replace('App/', '', $namespace);

实体将在 src/App/Entity/ 中创建。复制粘贴后,删除 src/App.

于 2017-11-11T09:51:31.030 回答