2011-12-05 9 views
1

私の問題の解決策を探していましたが、私はここで尋ねています。Symfony 2/PHP:json_encode

プライベートプロパティを含むオブジェクトの配列(またはオブジェクトのみ)に対してjsonでエンコードされた結果を返すにはどうすればよいですか?あなたはjson_encode($ myObjectという)を使用する場合、それはsymfonyのを使用している場合、モデル内のどこにでも存在しているプラ​​イベートまたは保護されたプロパティを、表示されません実際に

、...

私は「couldn驚いてjson_encodeのような、プロパティ自体の代わりにゲッターを呼び出すメソッドを見つけることはできません。

EDIT私はむしろのように見えるユニークな機能だろうその場合

:すべてのプロパティ名毎回書き換え避けるために

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だけがオブジェクトの真のシリアル化を処理します。

あなたはそれらをyourselveに実装するか、オブジェクトが自分自身のjson値を返すようにする必要があります。

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

そして、このようにそれを呼び出す:

json_encode(MyObject->toArray()); 

[編集:あなたは、アレイ内のすべてのあなたのプライベートの値を公開あなたはあなた自身のメソッドToArrayを(実装する必要があります

この質問はdoctrineに関するものではありませんが、symfony2とモデルの両方について言及しているので、あなたのモデルにArray Hydrationを使用することを検討してください:http://www.doctrine-project.org/docs/orm/2.0/en/reference/dql-doctrine-query-language.html#array-hydration

+0

呼び出すときに "未定義のメソッドを呼び出す"というメッセージが表示されました。 – Yoot

+0

申し訳ありません、説明に少し追加しました – Arend

+0

すべてのモデル(多くのプロパティを含む)に対して行う必要がある場合は大丈夫ですが、あまり便利ではありません。 – Yoot