通过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
}
}
答案 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';