ModelAdmin с отношением has_many

Я расширяю ModelAdmin управлять DataObject и у меня есть $has_many отношения, которые управляются другим DataObject, Я хотел бы управлять этим объектом на другой вкладке, но не знаю, как добавить его. Мой основной код:

ApplicationAdmin.php:

class Applications extends ModelAdmin {
private static $menu_title = 'Applications';

private static $url_segment = 'apps';

private static $managed_models = array (
'Application'
);
}

application.php

class Application extends DataObject {
private static $db = array(
'Name' => "varchar");

private static $has_many = array(
'Documents' => 'Document',
);

public function getCMSFields() {
$fields = FieldList::create(
TextField::create('Name'),
);

return $fields;
}
}

Document.php

class Document extends DataObject {
private static $db = array(
'Title' => "varchar",
);

private static $has_one = array(
"Document" => "File",
"Application" => "Application");

public function getCMSFields () {
$fields = FieldList::create(
TextField::create('Title'),
$doc = new UploadField('Document')
);
$doc->getValidator()->setAllowedExtensions(array('pdf', 'docx'));

return $fields;
}
}

В основном я хотел бы управлять документами для этой записи в Root.Documents Вкладка.

2

Решение

Вы можете использовать GridField обрабатывать отношения между Application а также Documentи поместите это поле на своей вкладке, если хотите. Пример:

# Application.php
public function getCMSFields() {

$fields         = parent::getCMSFields();
$nameField      = TextField::create('Name');
$documentsField = GridField::create(
'Documents',
'Documents',
$this->Documents(),
GridFieldConfig_RelationEditor::create()
);

$fields->addFieldToTab(
'Root.Main',
$nameField
);

$fields->addFieldToTab(
'Root.Documents',
$documentsField
);

return $fields;

}

Ваш код содержит некоторые опечатки в Document класс (имя класса содержит .php в нем, getValidator должно быть getValidator()), и этот класс также нуждается в $has_one = ['Application' => 'Application']; за отношение к работе.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]