Экран ModelAdmin для DataObject не открывается

1

В SilverStripe 3.1.13 я пытаюсь установить простые отношения "один ко многим" между DataObjects, администрируемыми ModelAdmin. Существует класс Facility который может иметь один FacilityCategory.

Я могу войти на вкладку "Категория объектов", но как только я войду на вкладку " Объект ", "главный" экран исчезнет, а админ заразится с этого момента - никакая вкладка больше не покажет содержимое.

Я удалил все таблицы, начиная с Facility и FacilityCategories, и повторно использовал /dev/build с флешем.

Кто-нибудь пролил бы на меня какой-то свет, почему он не работает? Что не так в моих классах/отношениях?

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'
    );
}
  • 0
    Возможно, в ваших $summary_fields (которые, как ожидается, будут частными) вы перечислили связанный объект категории, а не определенное поле в объекте категории, поэтому имейте в private static $summary_fields = array('Title', 'Category.Title'); , Кроме того, какая-либо конкретная причина, почему вы используете 2 отдельных modelAdmins? Я бы предпочел использовать один и тот же ModelAdmin для управления обеими моделями (поскольку они связаны).
  • 0
    @jpmcc Бычий глаз! Вот и все. Очень хороший урок. Пожалуйста, скопируйте ваш комментарий как ответ, и вы получите его.
Показать ещё 2 комментария
Теги:
silverstripe
data-objects

1 ответ

2
Лучший ответ

Возможно, что в ваших $summary_fields (которые, как ожидается, будут закрытыми), вы указали связанный объект категории, а не конкретное поле объекта категории, так что:

private static $summary_fields = array(
  'Title', 
  'Category.Title'
);
  • 0
    Еще одна вещь, которую нужно добавить к этому, вы, возможно, захотите изменить метку для поля сводки «Category.Title» на что-то другое. Используйте $field_labels как при задании меток в $summary_fields $field_labels есть некоторые беспорядочные крайние случаи.
  • 1
    Хорошая точка зрения. Я бы согласился с этим. Также очень полезно, если вам когда-либо нужно локализовать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню