Symfony Flex - Doctrine生成实体和实体运行时异常



我正在使用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 自动加载指令的实体实体。

提前谢谢!!

无论如何都不是修复,而是在他们赶上之前的一种解决方法。非常牛仔的方法。

  1. 使用标准的Symfony文件结构设置一个新项目。
  2. 将基本对象复制到实体文件夹中。
  3. 在那里生成授权php bin/console doctrine:generate:entities AppBundle
  4. 将它们复制并粘贴到新的Symfony Flex项目实体文件夹中。
  5. 使用 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。

相关内容

  • 没有找到相关文章

最新更新