首页 > 解决方案 > 在 MakeCrud.php 第 103 行:调用成员函数 getRepositoryClass() on null

问题描述

我正在尝试Symfony 4.4使用bin/console make:crud命令创建一个 crud,但出现以下错误

In MakeCrud.php line 103:

  Call to a member function getRepositoryClass() on null 

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

<?php

namespace Domain\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;

    class Segment
    {
        private $id;
    
        private $uidentifier;
    
        private $name;

我用命名空间 oto generate crud 键入类名,但我收到错误,可能是什么问题?

标签: phpsymfony

解决方案


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

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

bin/console make:crud 'Domain\Entity\Segment'

并得到了同样的错误信息。

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,然后复制/重构您生成的控制器和表单。无论哪种方式,都会很痛苦。

我想您也可以分叉制造商捆绑包并直接编辑源代码。如果您要生成一堆杂物,实际上可能值得付出努力。但这将留作练习。


推荐阅读