2017-12-19 10 views
1

Silverstripe 웹 사이트에서 사용자가 양식을 제출하면 콘텐츠 관리자가 제출 된 양식을 볼 수 있도록 CMS에 저장됩니다.JSString 인코딩 된 문자열을 Silverstripe에서 사람이 읽을 수있는 형식으로 변환

이 기능은 작동하지만 문제는 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":"[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에서 당신이 제출을 볼 수 있도록 페이지에 GridField 또는 ModelAdmin 인스턴스를 사용할 수 있습니다.