如何仅在使用静态方法时在 Symfony 中修复 'Did you forget a "use" statement [...]'?

How to fix 'Did you forget a "use" statement [...]' in Symfony only when using static methods?

使用 Symfony 框架,我正在尝试使用我的一个模型 classes(特别是 Doctrine ORM 的 Contao 包装器)将一些东西转储到我的数据库中。

我的模型有一个 use 语句,我可以实例化我的模型,甚至可以毫无问题地将它保存到数据库中。但是,当我尝试在模型 class 上调用静态方法时,我收到错误消息:

Attempted to load class "GenericModel" from the global namespace. Did you 
forget a "use" statement for "correct\namespace\GenericModel"?

这对我来说似乎很奇怪,因为当我希望实例化 class 时它工作得很好,但是当我尝试对其调用静态函数时它失败并出现命名空间错误。

如何更改我的代码才能使用静态函数?如果我遗漏了任何重要信息,请告诉我。

use correct\namespace\GenericModel;

class GenericClass {
    public function doThing() {
        $genericModel = new GenericModel(); // this works as expected
        $genericModel->setRow([
            'field1' => 'banana',
            'field2' => 'strawberry'
        ]);
        $genericModel->save();

        GenericModel::findBy('field1','banana'); // this line causes the error
    }
}

我在这里找到了问题的解决方案:

https://community.contao.org/de/showthread.php?68881-Symfony-bundle-Model-ClassNotFoundException

它是德语的,所以我将快速总结一下问题的机制。

静态 findBy 方法调用 Collection 中的方法,该方法调用变量 class 名称上的函数。本例中的 class 名称 'GenericModel'。由于 'GenericModel' 不在全局命名空间中,我收到 above-mentioned 错误。

解决方法是在Contao的配置中注册class名称。

$GLOBALS['TL_MODELS']['table_name'] = 'namespace\GenericModel';