Я расширяю 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
Вкладка.
Вы можете использовать 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'];
за отношение к работе.
Других решений пока нет …