格式化JSON编码的字符串在Silverstripe中更易于阅读

时间:2017-12-19 09:13:21

标签: php arrays json silverstripe

在Silverstripe网站中,用户提交表单并将其存储在CMS上,供内容管理员查看提交的表单。

该功能有效,但问题是我在PHP数组中返回$data,我想将其输出到CMS。

我想出的唯一方法是将其转换为JSON,但它只是输出一个JSON字符串,我希望有类似HTML表的东西,使其更具人性化。我该怎么做?

到目前为止我的代码是:

// converts array to jason, on controller
$SubmitedResult->SerialisedForm = Convert::array2json($data);

// $db on dataobject
private static $db = array(
  'SerialisedForm' => 'Text',
);

// JSON string received below
{"url":"\/test\/test-test\/testSubmit","Name":"Tom","Email":"tom@gmail.com","Phone":"564456","SecurityID":"c5efe841e26d6d088dd94dfcfe76f6ec80acac86","action_submit":"Submit"}

1 个答案:

答案 0 :(得分:3)

通常,您希望构建一个DataObject来存储您提交的表单数据。您似乎已经拥有它,但您可以使用它将所有数据存储在名为SerialisedForm的字段中。我建议您为所有表单字段创建一个单独的字段。

示例:

class FormSubmission extends DataObject
{
    private static $db = [
        'Name' => 'Varchar(255)',
        'Email' => 'Varchar(255)',
        'Phone' => 'Varchar(64)'
    ];

    // The summary_fields ensure that your fields directly show up in the GridField
    private static $summary_fields = [
        'Name' => 'Name',
        'Email' => 'Email',
        'Phone' => 'Phone'
    ];
}

然后在表单提交处理程序中,执行:

public function testSubmit($data, $form)
{
    $submittedResult = FormSubmission::create();
    $form->saveInto($submittedResult);
    $submittedResult->write();
    // redirect back or somewhere else…
}

在CMS中,您可以使用页面上的GridFieldModelAdmin实例查看提交内容。