問題タブ [jmsserializerbundle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
json - Symfony2: JMS シリアライザーのネストされたオブジェクトでタイムアウト
ネストされた 3 つのオブジェクト プロパティを持つオブジェクトをシリアル化しようとすると、
エラー: 最大関数ネスト レベル '250' に達しました
Entity Volunteer には、OneToOne with Person、OnetoMany with Focuses、および OneToMany with Skills があります。応答がシリアル化されている場合$volunteer->getPerson();
、期待される json 応答が発生します。ただし、$volunteer->getFocuses();
最大ネスティング レベル エラーも発生します。
アップデート
xdebug の最大値を増やすと、開発環境では 30 秒でタイムアウトします。
コントローラーのスニペット:
json - 関連付けによるエンティティのシリアル化
ここで宣言された別のエンティティ (タイプ) と多対 1 の関係を持つエンティティ (アイテム) があります。
そして、アイテムをシリアル化すると、参照されたエンティティ (タイプ) に他の属性が含まれますが、必要なのは ID だけでした:
代わりにこれで:
私はドキュメントを読み、グループとmaxdepthsでテストしましたが、うまくいきませんでした .
この機能はすでに含まれていますか?
使用して"jms/serializer-bundle": "dev-master"
編集
これは、関連付けのあるシリアル化されたエンティティのサンプルです。
私が本当に欲しかったのはこれでした(関連付けられたエンティティの追加属性なし):(素晴らしいライブラリであるため、JMSシリアライザーを使用しています:))
symfony - FOSElasticaBundle - JMSSerializerBundle 除外戦略が FOSUserBundle ユーザー エンティティで機能しない
orm 永続化ドライバーと JMSSerializerBundle シリアライザーで FOSElasticaBundle を使用しています。
私のユーザーは FOSUserBundle によって管理されており、これらをインデックス化しようとしていますが、パスワードなどのいくつかのフィールドを除外しています。
@ExclusionPolicy("all") @Expose @Exclude などの JMSSerializerBundle 除外ポリシーは、FOS\UserBundle\Model\User を拡張するユーザー エンティティに追加しても影響を受けません。ただし、これらの戦略は私の他のエンティティで期待どおりに機能します。
「salt」や「password」などのフィールドが Elasticsearch インデックスに追加されないようにするにはどうすればよいですか?
symfony - JMSSerializerBundle と FOSRestBundle でグループを機能させる方法は?
コンテキストに応じてエンティティのさまざまな種類のシリアル化を実現するために、さまざまなグループを設定しようとしています。
私の設定は次のようになります:
グループが設定されていない限り、プロパティを持つグループは公開されるべきではないと思います。
次の方法でコントローラーにグループを設定しようとしています。
それでも、露出されているものと露出されていないものには影響はありません。を変更しようとしなくてもSerializationContext
、groups
オプションは常に無視されるようです。
公開フラグを介してプロパティを切り替えることができるため、構成が機能していることはわかっています。
しかし、私はここで何が間違っていますか?
jmsserializerbundle - DoctrineObjectConstructor を使用して、新しいエンティティはどのように作成されますか?
JMSSerializerBundle を使用して、JSON を Doctrine エンティティに取り込もうとしています。データベースにまだ存在しない新しいエンティティを作成し、既存のエンティティが既に存在する場合は更新する必要があります。これを支援するために、JMSSerializer パッケージに含まれるDoctrineObjectConstructorを使用しています。次のような、識別子として指定されたプロパティを含む JSON を使用する場合:
{ "id": 1, "some_other_attribute": "stuff" }
逆シリアル化を試みると、JMSSerializer は警告を発し、リフレクションを利用して null 値のプロパティを設定しようとする例外で最終的に終了します。警告はすべて次のようになります。
PHP Warning: ReflectionProperty::setValue() expects parameter 1 to be object, null given in /Users/cdonadeo/Repos/Ubertester/vendor/jms/serializer/src/JMS/Serializer/GenericDeserializationVisitor.php on line 176
データベースに ID 1 のエンティティを手動で挿入してもう一度試行すると、エラーは発生せず、すべてが正しく機能しているように見えますが、機能の半分が不足しています。DoctrineObjectConstructor クラスのコードを見てみると、一番上にコメントがあります。
/** * Doctrine object constructor for new (or existing) objects during deserialization. */
construct()
しかし、関数がすべてのチェックを行った後、最後に呼び出すため、新しいエンティティを作成する方法がわかりません。
$object = $objectManager->find($metadata->name, $identifierList);
また、識別子がデータベースに存在しないため、結果は null になり、最終的に関数から返されます。これは、適切な ID を使用してデータベースに行を挿入すると機能する理由を説明していますfind()
。適切な Entity オブジェクトが返されるようになりました。これは、ライブラリの残りの部分が期待するものです。
ライブラリの使い方が間違っていますか、それとも壊れていますか? 私は Git リポジトリをフォークして編集を行いました。試してみると、すべてが多かれ少なかれ期待どおりに機能するようです。その編集にはいくつかの欠点があり、これを必要以上に難しくしているのではないかと思います。私が見る最大の問題は、永続化されたエンティティと永続化されていないエンティティが混在し、どちらがどれであるかを判断する方法がないことですが、それが大したことであるかどうかはわかりません.