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

时间:2017-08-26 19:07:15

标签: php symfony doctrine-orm symfony-flex

我正在使用Flex测试新的Symfony 4架构,我在创建Doctrine Entity或创建实体实体时遇到了大麻烦。

在以前版本的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自动加载指令的实体实体。

提前致谢!!!

2 个答案:

答案 0 :(得分:3)

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

  1. 使用标准Symfony文件结构设置新项目。
  2. 将基本对象复制到实体文件夹中。
  3. 在那里生成权限php bin/console doctrine:generate:entities AppBundle
  4. 将它们复制并粘贴到新的Symfony Flex项目实体文件夹中。
  5. 使用IDE在 AppBundle 的文件夹中找到并替换为 App
  6. 对不起,这远非理想,但我找到的最简单的方法,而不是手动生成所有的getter / setter。

    更新时间:25/01/2017

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

    显然,它被认为是不好的做法。相反,他们发布了一个new package called maker,它实际上为你创建了实体类,但没有getter / setter,而新建议的做法是依靠你的IDE为你自动生成Getters和Setters。

    除了ArrayCollections的{​​{1}}的构造函数之外,这是有效的,但手动添加它们并不需要太多。

    我上面所说的内容也反映在Symfony documentation

      

    生成Getters和Setter

         

    Doctrine现在知道如何将Product对象持久化到数据库。   但是这个班级本身还没用。所有的属性都是   私有,所以没有办法设置数据!

         

    因此,您应该为所有人创建公共getter和setter   您需要从课外修改的字段。如果你使用   像PhpStorm这样的IDE,它可以为你生成这些。在PhpStorm中,放   你的光标在课堂的任何地方,然后转到代码 - >生成   菜单并选择“Getters and Setters”:

答案 1 :(得分:1)

我遇到了同样的问题。这是另一种解决方案。

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

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

添加:

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

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