我在寻找解决方案时遇到了麻烦。这是我的代码:
class Page extends SiteTree
{
private static $many_many = [
'Slides' => SliderImage::class,
];
private static $many_many_extraFields = [
'Slides' => ['SlideSort' => 'Int'],
];
private static $table_name = 'Page';
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab(
'Root.Gallery',
$grid = GridField::create(
'Slides',
'Slides',
$this->Slides(),
GridFieldConfig_RelationEditor::create()
->addComponent(GridFieldOrderableRows::create('SlideSort'))
)
);
return $fields;
}
}
我收到此错误:[Emergency] Uncaught BadMethodCallException: Object->__call(): the method 'Slides' does not exist on 'Page'
答案 0 :(得分:1)
您的配置缓存已过时。将?flush
添加到您的Web浏览器URL中以清除它。
SilverStripe在命令行和浏览器中都缓存配置。如果要修改私有静态属性(例如本示例中的$many_many
和$many_many_extraFields
),则需要刷新配置缓存以使其受到尊重。
使用陈旧的缓存和新的ORM关系,您会收到此错误,因为SilverStripe不知道该关系是为了提供一种神奇的方法来访问它($this->Slides()
)。
答案 1 :(得分:0)
我找到了解决方案。 * .yml文件的代码结构未正确组织,可能会发生这些错误。例如
SilverStripe\SiteConfig\SiteConfig:
extensions:
- SilverStripers\RC\Extensions\SiteConfigExtension
在扩展名之前必须有一个空格:(以上代码)