【问题标题】:SilverStripe 4.0.0 GridFieldConfig_RelationEditor: adding relations to an object on creation time doesn't workSilverStripe 4.0.0 GridFieldConfig_RelationEditor:在创建时向对象添加关系不起作用
【发布时间】:2018-02-08 16:31:44
【问题描述】:

我有两个不同的数据对象(StockExchangeShare 和 NewsArticle),它们与 many_many 关系链接。

在 NewsArticle.php 中:

private static $many_many = [
    'Shares' => StockExchangeShare::class
];

在 StockExchangeShare.php 中:

private static $belongs_many_many = [
    'NewsArticles' => NewsArticle::class
];

添加新新闻文章时,用户应该能够将一些现有的证券交易所股票链接到新文章。这应该使用配置为“GridFieldConfig_RelationEditor”的 GridField 来完成。

目前,这仅在已创建新闻文章后才有效。我无法通过网格字段将共享添加到新的(未保存的)文章中。这是错误信息:

E_RECOVERABLE_ERROR:传递给 SilverStripe\ORM\DataList::subtract() 的参数 1 必须是 SilverStripe\ORM\DataList 的实例,给定 SilverStripe\ORM\UnsavedRelationList 的实例,在 /vendor/silverstripe/framework/src/ 中调用Forms/GridField/GridFieldAddExistingAutocompleter.php 在第 247 行

这是我用来创建网格字段的代码:

$gridFieldConfig = GridFieldConfig_RelationEditor::create();
$gridFieldConfig->removeComponentsByType(GridFieldAddNewButton::class);
$gridFieldConfig->getComponentByType(GridFieldAddExistingAutocompleter::class)->setSearchFields(array('name', 'tickerSymbol', 'isin', 'wpknr'));
$gridFieldConfig->getComponentByType(GridFieldAddExistingAutocompleter::class)->setResultsFormat('$name | $isin');

$fields->addFieldsToTab('Root.Main', [
    GridField::create(
        'Shares',
        'Shares',
        $this->Shares(),
        $gridFieldConfig
    ),
]);

这是 SilverStripe 的问题还是我做错了什么?

【问题讨论】:

    标签: php silverstripe silverstripe-4


    【解决方案1】:

    这也是 SilverStripe 3 中的相同行为。通常我所做的是在显示 GridField 之前检查记录是否已保存,否则添加一条消息,说明保存后将可用。

    public function updateCMSFields(FieldList $fields)
    {
        if (!$this->owner->isInDB()) {
            $fields->addFieldToTab('Root.Main', LiteralField::create('Please note: you can modify relations when this item has been saved.'));
            return;
        }
        // add your GridField now
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-03
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 2016-03-05
      • 1970-01-01
      相关资源
      最近更新 更多