【问题标题】:Storing and retrieving a serialized array in a Symfony2 form以 Symfony2 形式存储和检索序列化数组
【发布时间】:2012-12-05 20:21:30
【问题描述】:

在我的数据库中有一个表,其中有一列文本类型。此列包含一个序列化数组。此数组由另一个应用程序读取和存储,我无法更改其格式。

序列化数组包含两种不同语言的数据库名称、表名称和列名称的选择。

我想在 Symfony2 中编写一个能够修改这个序列化数组的控制器、实体、表单等。

我可以使用一个脚本,它可以提供每个序列化数组可能包含的所有可能的数据库名称、表名和列名的数组。

目标是提供一个复选框列表,用户可以在其中选择数据库、表和列。接下来,他们可以翻译名称。

由于所有数据都非常不稳定,我不确定这在 Symfony2 中是否可行。

另一种方法是创建以下实体:{数据库、表、列}并完全面向对象。然后我可以将序列化数组中的选择导出到期望它的外部应用程序...

你们能理解我的推理吗?我是否忽略了这里的策略...?

添加: 该数组是一个嵌套数组,最高可达五度。数据库包含表,其中包含列。每个项目都有一个原始名称和一个翻译名称。

【问题讨论】:

  • 您能否举一个很好的例子来说明您拥有的阵列以及您希望如何管理该阵列?
  • 我添加了一些关于数组结构的更多细节。阵列的管理...嗯,这几乎是我的问题 :) 我如何在 Symfony2 中管理它?

标签: php forms serialization symfony doctrine-orm


【解决方案1】:

我想你回答了你自己的猜测:

An alternative is to make the following entities: { database, table, column } and do it fully OO.
And then I could export a selection in a serialized array, to the external application that 
expects it that way...

您将从映射到您的表的主实体开始。

class SomeEntity
{
    protected $serializedInfo;

    public getDatabases()
    {
        // Process serializedInfo into an array of database objects and return

然后您将 SomeEntity 传递给 SomeEntityFormType,后者又使用 DatabaseFormTypes 的集合。然后 DatabaseFormType 有一个 TableFormTypes 的集合等等。

最终您的表单将被发布并且 SomeEntity 将被更新。然后,您在发布之前进行序列化。应该直截了当。如果您希望用户添加信息,可能会更具挑战性,但即便如此,它也是可行的。

【讨论】:

    【解决方案2】:

    我知道现在很晚了,但我真的很忙于大学,所以我不能早点回答

    这是我认为最好的做法

    假设包含包含您的数组的列的表称为 foo

    因此,您创建了一个名为 Foo 的实体,并包含一个具有您喜欢的名称的字段(类型文本)

    现在棘手的部分是创建一个名为 Database 的对象,其中包含您需要的所有关系(到表对象和表对象到列对象)

    因此,即使我告诉您将字段类型设为文本,您仍会将对象数据库传递给该字段

    那么它是如何工作的

    Database 对象将有一个 __string 方法,该方法将按照您想要的方式返回对象的序列化数组

    这样当学说2尝试将数据库对象保存在文本字段中时,它将被保存为__string方法返回的字符串

    您将拥有将序列化数组转换为数据库对象的 getDatabase

    这是我的想法,不知道它是否适合你

    【讨论】:

    • 这是一个有趣的解决方案。虽然我目前选择了另一种方法,但我会在较小的范围内尝试一次,看看它是如何工作的。谢谢,PHP 爱好者!
    猜你喜欢
    • 2013-07-04
    • 1970-01-01
    • 2017-05-28
    • 2015-03-28
    • 1970-01-01
    • 2017-03-07
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多