2

私はWebページからエンティティを変更することに取り組んでいます(Symfonyでは珍しいことではありません:))。現在、変更が必要なエンティティがあります。編集の直後にエンティティを変更するのではなく、その編集をJeditableで行います。変更した要素を json に保存し、ユーザーが変更を確認すると (モーダル ダイアログの確認アクションを介して)、その JSON をコントローラーに送信します。

そして、事態は悪化します^^

json 配列に正しい情報が含まれていることを確認しました。しかし、コントローラーでリクエストを傍受すると、必要なものが含まれていないようです。これが私のコントローラーです:

public function postorganisationAction(){
    $modifFields = array();
    $content = $this->get("request")->getContent();
    $this->get('logger')->info('request123456 ');
    if (!empty($content))
    {
        $modifFields = json_decode($content, true);
        $repository = $this->getDoctrine()
               ->getEntityManager()
               ->getRepository('MyBundle:Organisation');
        $organisation = $repository->findById($modifFields["id"]);
        $organisation->setFromArray($modifFields);

        $em = $this->getDoctrine()->getEntityManager();

        $em->persist($organisation);

        $em->flush();
    }

} 

setFromArray 関数は、 などの要素を含む配列を取得し"name" => "newname"ます。

リクエスト、コンテンツ、または$modifFields["id"](先ほど言ったように、JSON の ID が jquery で正しいことを確認しました) のいずれかをログに記録しようとすると、ログは表示されません。

私が間違っていることについて手がかりを持っている人はいますか?

編集:

いくつかの変更の後 (ManseUK のおかげで)、次のことが可能になりました:
- jQuery 関数を取得して、配列ではなく JSON 文字列を送信する ( JSON.stringify(oModifFields);)
- 問題のトラブルシューティング: でキャスト エラーが発生し$organisation、それをオブジェクトに変換しました必要なタイプの

そしてそれはそれについてです^^

4

1 に答える 1

0

Symfony2 には、エンティティをシリアライズおよびデシリアライズするための便利なクラスがいくつかあります。

手順は次のとおりです。

  1. エンティティを配列に正規化する方法を定義します。配列のキー/値のすべてのペアは、json 文字列のキー/値になります。
  2. 配列 (正規化されたエンティティ) を json 文字列、XML ドキュメント、または必要なものに変換するシリアライザーをインポートします。

最初の操作 (エンティティの正規化) では、2 つの可能性が Symfony2 に組み込まれています。

  • エンティティに Symfony\Component\Serializer\Normalizer\NormalizableInterface を実装します。json に表示するプロパティを配列に正規化または非正規化する 2 つのメソッドを入力する必要があります。
  • Symfony\Component\Serializer\Normalizer\NormalizerInterface を実装する独自のノーマライザー クラスを作成します。

コントローラー (または定義するサービス) で、次の操作を実行してエンティティをエンコードします。

$serializer = new Symfony\Component\Serializer\Serializer(
       array(
          new Symfony\Component\Serializer\Normalizer\CustomNormalizer(), //if you implement NormalizableInterface
          new YourOwnCustomNormalizer() //if you created your own custom normalizers
       ), 
       array(
          'json' => new Symfony\Component\Serializer\Encoder\JsonEncoder()
       )
    );
$json = $serializer->serialize($yourEntity, 'json');
return new Response($json);

JSON 文字列からエンティティを取得するには、次のようにします。

$jsonString = $content = $this->get("request")->get('yourString'); //please, check how you retrieve data from your request
$serializer = new Symfony\Component\Serializer\Serializer(
       array(
          new Symfony\Component\Serializer\Normalizer\CustomNormalizer(), //if you implement NormalizableInterface
          new YourOwnCustomNormalizer() //if you created your own custom normalizers
       ), 
       array(
          'json' => new Symfony\Component\Serializer\Encoder\JsonEncoder()
       )
    );
$entity = $serializer->deserialize($jsonString, '\namespace\to\your\entity', 'json');
于 2012-08-13T10:22:44.970 に答える