教义 orm:generate-proxies 抛出“无法实例化自定义生成器”

Posted

技术标签:

【中文标题】教义 orm:generate-proxies 抛出“无法实例化自定义生成器”【英文标题】:Doctrine orm:generate-proxies throwing "Can't instantiate custom generator" 【发布时间】:2015-11-09 01:31:43 【问题描述】:

教义 2.5。尝试手动生成代理时

doctrine orm:generate-proxies

抛出异常:

[学说\ORM\ORMException] 无法实例化自定义生成器:MyBundle\MyCustomGenerator

我定义了一个可以正常工作的自定义生成器:

/**
 * @ORM\Column(type="string")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="CUSTOM")
 * @ORM\CustomIdGenerator(class="MyBundle\MyCustomGenerator")
 */
protected $id;

另外,手动实例化生成器,比如

$a = new MyBundle\MyCustomGenerator();

有效。但是出于某种原因,Doctrine Console 抛出了上述异常。

我已尝试调试并检查发生了什么。 异常在ClassMetadataFactorycompleteIdGeneratorMapping 中定义。我检查了$definition['class'] 存储了我的自定义生成器的名称:MyBundle\MyCustomGenerator。但是,Doctrine 仍然找不到课程。 以为我应该将定义添加到cli-config.php 为explained in the doc,使用use MyBundleuse MyBundle\MyCustomGenerator,但它不起作用 - 仍然引发了相同的异常。

我应该如何让 Doctrine Console 知道我的自定义 ID 生成器?

【问题讨论】:

【参考方案1】:

在我的例子中,有几个语法错误导致类无法正确自动加载。

一旦我在自定义生成器类中解决了这些问题,Doctrine 就能够找到该类。我原以为异常抛出是语法错误,但事实并非如此,可能是因为该类仅通过注释使用。

但是,正如您所说,您可以通过其他方式实例化您的类,因此您可能不会遇到与我相同的问题,但也许这可以帮助其他人!

【讨论】:

【参考方案2】:

不确定它是否会有所帮助或仍然需要帮助,但试试这个

@ORM\CustomIdGenerator(class="\MyBundle\MyCustomGenerator")

即在类定义中添加斜杠

【讨论】:

以上是关于教义 orm:generate-proxies 抛出“无法实例化自定义生成器”的主要内容,如果未能解决你的问题,请参考以下文章

教义 findBy '不等于'

教义注释常量连接

教义一对多关系

可嵌入的教义

教义实体映射不正确

教义 queryBuilder setParamater