[解決済み] Symfony 2.0 AJAX アプリケーションで Doctrine のエンティティを JSON にエンコードするには?
2023-02-06 13:31:02
質問
Symfony 2.0を使用してゲームアプリを開発しています。私はバックエンドに多くのAJAXリクエストを持っています。そして、より多くの応答は、エンティティをJSONに変換しています。例えば
class DefaultController extends Controller
{
public function launchAction()
{
$user = $this->getDoctrine()
->getRepository('UserBundle:User')
->find($id);
// encode user to json format
$userDataAsJson = $this->encodeUserDataToJson($user);
return array(
'userDataAsJson' => $userDataAsJson
);
}
private function encodeUserDataToJson(User $user)
{
$userData = array(
'id' => $user->getId(),
'profile' => array(
'nickname' => $user->getProfile()->getNickname()
)
);
$jsonEncoder = new JsonEncoder();
return $jsonEncoder->encode($userData, $format = 'json');
}
}
そして、私のすべてのコントローラは、エンティティを取得し、そのフィールドのいくつかをJSONにエンコードするという同じことをします。ノーマライザーを使用して、すべてのエンティティをエンコードできることは知っています。しかし、あるエンティティが他のエンティティに循環するリンクを持っている場合はどうでしょうか?またはエンティティグラフが非常に大きい場合はどうなりますか?あなたは何か提案を持っていますか?
私は、エンティティのためのいくつかのエンコーディングスキーマについて考えています...または使用する
NormalizableInterface
を使って循環を避けるとか..,
どのように解決するのですか?
別の方法として JMSSerializerBundle . そして、コントローラで次のようにします。
$serializer = $this->container->get('serializer');
$reports = $serializer->serialize($doctrineobject, 'json');
return new Response($reports); // should be $reports as $doctrineobject is not serialized
エンティティクラスでアノテーションを使用することで、シリアライズがどのように行われるかを設定することができます。上のリンクにあるドキュメントを参照してください。例えば、リンクされたエンティティを除外する方法は以下の通りです。
/**
* Iddp\RorBundle\Entity\Report
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Iddp\RorBundle\Entity\ReportRepository")
* @ExclusionPolicy("None")
*/
....
/**
* @ORM\ManyToOne(targetEntity="Client", inversedBy="reports")
* @ORM\JoinColumn(name="client_id", referencedColumnName="id")
* @Exclude
*/
protected $client;
関連
-
これだけ読めばOK! -Ajaxの説明
-
Jquery EasyUI +Ajax +Json +汎用ハンドラで、データのフロントエンドとバックエンドのインタラクションを実現 --- Goodness Commune Project
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] jQuery Ajax呼び出し後のリダイレクトリクエストを管理する方法
-
[解決済み] どうすればjQueryに非同期ではなく、同期のAjaxリクエストを実行させることができますか?
-
[解決済み] 同じサーバーの異なるポートはクロスドメインとみなされますか?(Ajax的な意味で)
-
[解決済み] IEでjQueryのajaxを呼び出すと「No Transport」エラーが発生する。
-
[解決済み] Django に最適な AJAX ライブラリは?[クローズド]
-
[解決済み] jQuery が POST パラメータとして文字列を送信する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
これだけ読めばOK! -Ajaxの説明
-
Jquery EasyUI +Ajax +Json +汎用ハンドラで、データのフロントエンドとバックエンドのインタラクションを実現 --- Goodness Commune Project
-
[解決済み] 関数呼び出しのネスト数の上限を増やす
-
[解決済み] 同じサーバーの異なるポートはクロスドメインとみなされますか?(Ajax的な意味で)
-
[解決済み] IEでjQueryのajaxを呼び出すと「No Transport」エラーが発生する。
-
[解決済み] Django に最適な AJAX ライブラリは?[クローズド]
-
[解決済み] jQuery が POST パラメータとして文字列を送信する