【问题标题】:Sonata Admin save native collection without EntitySonata Admin 保存没有实体的原生集合
【发布时间】:2017-01-21 10:49:11
【问题描述】:

我想将一些数据保存在序列化数组中。以下

->add('consumptionData', 'sonata_type_native_collection', array(
            'label' => 'Verbrauchsdaten',
            'entry_type' => ConsumptionDataType::class,
            'allow_add' => true,
            'allow_delete' => true,
            'entry_options' => array(
                'label' => false
            )
        ))

使用 symfony 可以正常工作,但使用奏鸣曲管理员我得到了

通过关系“AppBundle\Entity\Document#meterPoints”找到了一个新实体,该实体未配置为对实体进行级联持久化操作...

我如何告诉奏鸣曲它应该是一个序列化的数组而不是一个实体?

【问题讨论】:

  • IMO 一般:这不是奏鸣曲问题,sonata_type_native_collection 字段类型扩展了 CollectionType field。关于您发布的信息:错误与 meterPoints 有关,但奏鸣曲管理定义与 consumptionData 有关如果您需要帮助,请提供所有必要且正确的代码示例。

标签: php symfony sonata-admin symfony-sonata


【解决方案1】:

如果您想将数据保存为数组,您可以将其“转换”为实体中字段所需的 getter 类型。

如果它破坏了您的代码逻辑,您可以为“假”实体添加一些新的 getter/setter 方法。当为表单字段指定 getter 和 setter 时,表单字段名称是合法的,即使您的实体中不存在具有此名称的字段。

因此,您可以在构建器中编写如下内容:

->add('consumptionDataForArray', 'sonata_type_native_collection', [...])) 

在你的实体中是这样的:

public function setConsumptionDataForArray($data)
{
    // change your data here as you need

    $this->consumptionData = $neededData;
}

public function getConsumptionDataForArray()
{
    // cast your data back to array

    return $castedBackData;
}

希望这是您问题的答案。

【讨论】:

    猜你喜欢
    • 2014-12-04
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2015-05-30
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多