动态设置通过 Silverstripe GridField (CMS) 添加的对象的值

Dynamically set values of objects added via Silverstripe GridField (CMS)

我有一个基本的关系编辑器 GridField,我需要动态 define/set 通过该 GridField 添加的任何对象的值,以及与 GridField的上下文。

class Draw extends DataObject {

    private static $has_many = array(
        'Items' => 'Item'
    );
}

当通过 DrawItems GridField 添加项目时,我需要定义一个值以在 Item::getCMSFields()

中使用

这里有一些好的建议:https://www.silverstripe.org/community/forums/data-model-questions/show/21517?start=7

您可以直接使用 GridFieldGridFieldDetailForm 组件,并相应地设置字段。

对我有用的代码是:

    $config = GridFieldConfig_RecordEditor::create();
    if($this->exists()) {
        // Ensure that fields are generated with knowledge of the parent
        $editComponent = $config->getComponentByType('GridFieldDetailForm');
        $item = new Item();
        $item->DrawID = $this->ID;
        $editComponent->setFields($item->getCMSFields());
    }
    $items = new GridField('Items', 'Items', $this->Items(), $config);
    $fields->addFieldToTab('Root.Main', $items);

然后您可以从 Item::getCMSFields()

调用 Draw::get()->byID($this->DrawID)