2016-09-15 108 views
2

我正在延伸ModelAdmin來管理DataObject,我有$has_many的關係由另一個DataObject管理。我想在另一個選項卡上管理這個對象,但是我怎麼會添加它。我的基本代碼:ModelAdmin與has_many的關係

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來處理ApplicationDocument之間的關係,並根據需要將該字段放在其自己的選項卡上。例如:

# 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'];

+0

謝謝。我很好奇,如果我沒有爲'Root.Main'添加'addFieldToTab',我的字段仍然出現。這是因爲父母正在創建默認的? – Rudiger

+1

@Rudiger,您可以在DataObject.php中查看'getCMSFields()'並跟蹤從那裏到這些字段自動生成的地方。使用'$ fields = parent :: getCMSFields();'是一個很好的習慣,因爲它有一個擴展掛鉤,它允許模塊修改所有'DataObjects''cms字段。 –