我无法找到一个解决方案。这里是我的代码:
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'
你的配置缓存是过时的。 ?flush
添加到您的web浏览器URL将其清除。
SilverStripe同时在命令行和浏览器高速缓存配置。如果你正在修改一个私人静态属性(如在这个例子中$many_many
和$many_many_extraFields
),那么你需要清空配置缓存,以便它得到尊重。
随着过时的高速缓存和一个新的ORM的关系,你得到这个错误,因为SilverStripe不知道为了提供一个神奇的方法来访问它($this->Slides()
)之间的关系。
我找到了解决办法。发生不能很好地组织这些错误可能是* .yml文件的代码结构。用于例如
SilverStripe\SiteConfig\SiteConfig:
extensions:
- SilverStripers\RC\Extensions\SiteConfigExtension
有一个空间必须扩展之前包括:(上面的代码)