【问题标题】:ModelAdmin screen for DataObject not openingDataObject 的 ModelAdmin 屏幕未打开
【发布时间】:2015-11-08 14:03:13
【问题描述】:

在 SilverStripe 3.1.13 中,我试图在 ModelAdmin 管理的 DataObjects 之间建立简单的一对多关系。有一个Facility 类可以有一个FacilityCategory

我可以进入设施类别选项卡,但是一旦我进入 设施 选项卡,“主”屏幕就会变成空白,并且从那时起管理员就会受到污染 - 没有选项卡会再显示内容.

我删除了所有以 Facility 和 FacilityCategories 开头的表,并使用flush反复进行了开发/构建。

有人能解释一下为什么它不起作用吗?我的班级/关系有什么问题?

Facility.php

class Facility extends DataObject {
    private static $db = array(
        'Title' => 'Varchar',
    );

    private static $has_one = array(
        'Category' => 'FacilityCategory'
    );

    public static $summary_fields = array(
        'Title', 'Category'
    );



    public function getCMSFields(){
        $fields = FieldList::create(
            TextField::create('Title'),
            DropdownField::create('FacilityCategoryID', 'Category')
                ->setSource(FacilityCategory::get()->map('ID', 'Title'))
                ->setEmptyString('-- select a category --')
        );
        return $fields;
    }
}

class FacilityAdmin extends ModelAdmin {
    private static $menu_title = 'Facilities';
    private static $url_segment = 'facilities';
    private static $managed_models = array(
        'Facility'
    );
}

FacilityCategory.php

class FacilityCategory extends DataObject {
    private static $db = array(
      'Title' => 'Varchar'
    );

    private static $has_many = array(
      'Facilities' => 'Facility'
    );

    public function getCMSFields(){
        $fields = FieldList::create(
            TextField::create('Title')
        );
        return $fields;
    }
}

class FacilityCategoryAdmin extends ModelAdmin {
    private static $menu_title = 'Facility Categories';
    private static $url_segment = 'facility-categories';
    private static $managed_models = array(
        'FacilityCategory'
    );
}

【问题讨论】:

  • 可能是在您的$summary_fields(应该是私有的)中,您列出了相关的类别对象而不是类别对象上的特定字段,private static $summary_fields = array('Title', 'Category.Title'); 也是如此。另外,您使用 2 个单独的 modelAdmins 的任何特殊原因?我倾向于使用相同的 ModelAdmin 来管理两个模型(因为它们是相关的)。
  • @jpmcc 牛眼!就是这样。非常好的一课。请复制您的评论作为答案,您会被接受。
  • 根据两个单独的 ModelAdmins - 这是我将管理内容与相应的 DataObject 类一起保存在同一个文件中的第一个直观选择,但是如果我告诉我这种方法会影响表现,我一定会走你的路。
  • 抱歉,我不是想挑剔什么的。不确定性能。

标签: php silverstripe data-objects modeladmin


【解决方案1】:

可能是在您的$summary_fields(应该是私有的)中,您列出了相关的类别对象而不是类别对象上的特定字段,因此:

private static $summary_fields = array(
  'Title', 
  'Category.Title'
);

【讨论】:

  • 只需添加一件事,您可能希望将“Category.Title”摘要字段的标签更改为其他内容。 Use $field_labels 因为在 $summary_fields 中指定标签时会出现一些混乱的边缘情况。
  • 好点。我同意这一点。如果您需要本地化,也非常有用。
猜你喜欢
  • 2015-11-09
  • 2013-04-17
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 2012-09-27
  • 1970-01-01
  • 2016-06-25
相关资源
最近更新 更多