如何仅在使用静态方法时在 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';
使用 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';