2017-12-19 18 views
1

SilverstripeのWebサイトでは、ユーザーがフォームを送信し、CMSに格納されてコンテンツマネージャが送信されたフォームを表示します。JSStringエンコードされた文字列をSilverstripeでより人間に読める形式に変換する

機能は動作しますが、問題は私が$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":"[email protected]","Phone":"564456","SecurityID":"c5efe841e26d6d088dd94dfcfe76f6ec80acac86","action_submit":"Submit"} 
+0

https://stackoverflow.com/help/mcveに従って最小限で完全で検証可能な例を投稿してください – cguedel

+0

私は受け取ったJSON文字列を投稿しました – user9013856

答えて

2

通常あなたがあなたの送信されたフォームデータを保存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インスタンスを使用することができます。

関連する問題