silverstripe Object->__call(): 方法 'fortemplate' 在 'HasManyList' 上不存在,或者方法不是 public

silverstrip Object->__call(): the method 'fortemplate' does not exist on 'HasManyList', or the method is not public

我在前端模板中遇到这个错误我的模板文件是空的, 当我尝试 addFieldToTab 时。我认为 $has_many 变量有问题。

我的代码如下:

class ProductsPage extends Page
{
  private static $has_many = array (
    'ProductCategories' => 'ProductCategories',
  );

    public function getCMSFields() {
       $fields = parent::getCMSFields();
       $fields->addFieldToTab('Root.Main', GridField::create(
            'ProductCategories',
            'Category',
            $this->ProductCategories(),
            GridFieldConfig_RecordEditor::create()
        ));
       return $fields;
   }
}

错误:

[User Error] Uncaught Exception: Object->__call(): the method 'fortemplate' does not exist on 'HasManyList', or the method is not public.

PasteBin URL : https://pastebin.com/YZJn3a4t

当我删除 $has_many 变量时,它工作得很好。在我的前端模板中是空的。

如何解决这个我不明白的错误?

$has_many数组value应该是单数形式,而key是复数形式。

使用您的示例,这应该是 'Category' => 'ProductCategories'(我从您对下面的 GridField 所做的操作中得到这个)。

希望对您有所帮助。