代码之家  ›  专栏  ›  技术社区  ›  user9013856

在Silverstripe中将JSON编码的字符串格式化为更具可读性的字符串

  •  1
  • user9013856  · 技术社区  · 7 年前

    在Silverstripe网站中,用户提交一个表单并将其存储在CMS中,以便内容经理查看提交的表单。

    功能正常,但问题是 $data 在PHP数组中返回,我想将其输出到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 回复  |  直到 7 年前
        1
  •  3
  •   bummzack    7 年前

    通常你会想建立一个 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中,您可以使用 GridField 在您的页面上或 ModelAdmin 实例以查看提交。