未捕获的BadMethodCallException:对象-> __ call():“页面”上不存在方法“幻灯片”

时间:2019-01-29 04:11:00

标签: php silverstripe

我在寻找解决方案时遇到了麻烦。这是我的代码:

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'

2 个答案:

答案 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

在扩展名之前必须有一个空格:(以上代码)