仅在使用静态方法时,如何解决Symfony中的“您是否忘记了[use]语句[...]”的问题?

时间:2019-06-16 09:26:38

标签: php symfony orm namespaces contao

通过Symfony框架,我试图使用我的Model类之一(特别是Doctrine ORM的Contao包装器)将某些内容转储到我的数据库中。

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

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

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

如何更改代码以能够使用静态功能?如果我错过了任何重要信息,请告诉我。

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
    }
}

1 个答案:

答案 0 :(得分:1)

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

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

它是德语的,所以我将对问题的机理做一个简短的总结。

静态findBy方法调用Collection中的方法,该方法在变量类名称上调用一个函数。在这种情况下,类名为“ GenericModel”。由于“ GenericModel”不在全局名称空间中,因此出现上述错误。

解决方案是在Contao的配置中注册类名称。

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