在MakeCrud.php中的第103行:对null调用成员函数getRepositoryClass()



我试图用bin/console make:crud命令在Symfony 4.4中创建crud,但收到以下错误

In MakeCrud.php line 103:
Call to a member function getRepositoryClass() on null 

这是我试图用于crud 的类的一部分

<?php
namespace DomainEntity;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineCommonCollectionsCollection;
class Segment
{
private $id;

private $uidentifier;

private $name;

我键入了带有namespasce的类名来genterate crud,但我得到了错误,可能出了什么问题?

所以我有点好奇,并确认这是一个命名空间问题。

我为自己创建了一个Domain\Entity\ Segment类,然后运行

bin/console make:crud 'DomainEntitySegment'

得到了相同的错误信息。

make:crud命令期望实体位于App\Entity之下。似乎无法说服它在Domain\Entity下只查找实体。

然而,Maker Bundle本身允许您更改应用程序根命名空间的名称:

# config/packages/maker.yaml Need to add this file
maker:
root_namespace: Domain
# Then run
bin/console make:crud Segment

它是有效的。问题是根命名空间用于生成所有文件,因此,例如,您最终得到的Domain\Controller\SegmentController类可能不是您希望的位置。

我检查了源代码,没有简单的方法只调整实体名称空间。如果你计划大量使用crud,那么你要么需要将你的实体复制到App\Entity,要么指定root_namespace,然后复制/重构你生成的控制器和表单。不管怎样,这都是一种痛苦。

我想您也可以派生maker捆绑包并直接编辑源代码。如果你有一堆crud要生成,那么付出这些努力可能是值得的。但这将是一项练习。

最新更新