2011-12-05 9 views
1

잠시 동안 내 문제에 대한 해결책을 찾고 있었으므로 여기를 클릭하십시오.Symfony 2/Php : json_encode

개인 속성이 포함 된 개체 배열 (또는 개체 만)에서 json 인코딩 결과를 어떻게 반환 할 수 있습니까? 당신이로 json_encode ($ 인 myObject)를 사용하는 경우, 그것은 심포니를 사용하는 경우 모델의 도처에 존재하는 개인 또는 보호 속성을 표시하지 않습니다 실제로

, ...

내가 '나오지 않았어 놀랐어요 json_encode와 같이 속성 대신 getter를 호출하는 메서드를 찾습니다.

아이디어가 있으십니까? ...

을 모든 속성 이름 매번 다시 작성 피하기 위해

public function toArray() { 
    $vars = get_object_vars($this); 
    $result = array(); 
    foreach ($vars as $key => $value) { 
     if (is_object($value)) { 
      $result[$key] = toArray($value); 
     } else { 
      $result[$key] = $value; 
     } 
    } 
    return $result; 
} 

어쨌든 내 생각 :

이 경우 편집

차라리처럼 보이는 독특한 기능을 할 것 필자가 필요로하는 변수들을 포함하는 배열을 생성 할 것이므로, 생성 된 코드 인 모델을 만지지는 않을 것이다.

+1

제목 필드를 사용하여 질문을 기술하십시오 ._ –

답변

0

지금 당장은 없습니다. PHP serialize/unserialize만이 객체의 진정한 직렬화를 처리합니다.

당신은 그것들을 구현해야하며, 아니면 객체가 json 값을 반환하도록해야합니다.

당신은 어레이의 모든 개인 값을 표시 곳에 자신의 방법 toArray()를 구현해야합니다

:

public function toArray() 
{ 
    return array(
     'property1' => $this->myproperty1, 
     'property2' => $this->myproperty2 
); 
} 

그리고 다음과 같이 호출 :

json_encode(MyObject->toArray()); 

[편집 :이 질문은 doctrine과 관련이 없지만 symfony2와 모델을 모두 언급 했으므로 모델에 Array Hydration을 사용하는 것이 좋습니다.

+0

전화를 걸 때 "정의되지 않은 메서드 호출 toArray"라는 메시지가 표시됩니다. – Yoot

+0

죄송합니다. 설명에 약간의 설명이 추가되었습니다. – Arend

+0

모든 모델 (속성이 많은)에 대해 수행해야 할 때 좋지는 않으나 매우 편리합니다. – Yoot