私は一晩中これについて頭を悩ませてきたようです。ドキュメント クエリの結果をシリアル化しようとするたびに、bool(false)の結果が返されます。おそらく、これはシリアル化が失敗していることを意味します (すばらしい! 失敗した理由を喜んで教えてくれるでしょうか? いいえ? そうは思いませんでした。 )
マッピングが保持されているJMSSerializerBundle
場所を伝えました。例:FOSUserBundle
jms_serializer:
metadata:
file_cache:
dir: "%kernel.cache_dir%/serializer"
auto_detection: true
directories:
FOSUserBundle:
namespace_prefix: "FOS\\UserBundle"
path: "%kernel.root_dir%/config/serializer/fosuser"
Model.User.xmlなどの非常に単純な XML シリアライザー メタデータ ファイルを定義しました。
<?xml version="1.0" encoding="UTF-8" ?>
<serializer>
<class name="FOS\UserBundle\Model\User" xml-root-name="user" exclusion-policy="all">
<property name="username" type="string" expose="true" />
</class>
</serializer>
そして、テストコントローラーでは、より洗練された何かをしようとする前にシリアライザーを手動で呼び出しています。
class DefaultController extends Controller
{
public function serializeAction()
{
$userManager = // get the user manager
$users = $userManager->findUsers();
$serializer = $this->get('jms_serializer');
foreach ($users as $id => $user) {
Debug::dump('Processing user: '.$user->getUsername());
$result = $serializer->serialize($user, 'json');
Debug::dump($result);
}
/*return a response */
}
}
結果?常にbool(false)。
User
ただし、新しいオブジェクトを手動で作成すると、シリアル化は正常に機能します。たとえば、次のようになります。
class DefaultController extends Controller
{
public function serializeAction()
{
$userManager = // get the user manager
$users = $userManager->findUsers();
$serializer = $this->get('jms_serializer');
$user = new User();
$user->setUsername('testusername');
Debug::dump('Processing user: '.$user->getUsername());
$result = $serializer->serialize($user, 'json');
Debug::dump($result);
/*return a response */
}
}
何かご意見は?私はこれについて私の心を失う準備ができています。
編集:また、さらに検討すると、シリアライゼーション メタデータが尊重されているようには見えないことに注意してください。上記のように、私はユーザー名のみを公開していますがUser
、コントローラーで新しいものを作成してシリアル化すると、公開されているだけでなくusername
、enabled
、locked
、expired
、roles
、およびcredentials_expired
. null 以外のデータが含まれている場合、すべてのフィールドが表示されると思います。
編集 (2): ;DoctrineObjectConstructor
のデフォルトのオブジェクトコンストラクターを使用することへの参照を見てきました。私の問題を解決できることを期待して、この回答serializer
で特定された手順を実行しました。悲しいかな、彼らはそうしませんでした(その答えと質問は、とにかく逆シリアル化のためのものだったようです)、bool(false)の結果は持続します。
編集 (3):シリアライゼーション メタデータが取得されなかった問題は、私が尋ねた別の質問: JMSSerializerBundle mix auto detection and explicit directory?auto_detection
に示されているように、と の明示的な宣言が混在しているためのようです。directories