Как найти метаданные внутри JMS Serializer SubscribeingHandler? - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь десериализовать строку xml внутри SubscribingHandler, основываясь на свойстве xml корневого узла, но я не могу найти правильный способ сделать это.

Давайтевзгляните на этот кусок псевдокода:

<?php
class FormulierWaardeHandler implements SubscribingHandlerInterface
{
    private const TYPE_NAMESPACE = 'http://www.w3.org/2001/XMLSchema-instance';
    private const TYPE_ATTRIBUTE = 'type';

    public static function getSubscribingMethods()
    {
        return array(
            array(
                'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
                'format' => 'xml',
                'type' => WaardeType::class,
                'method' => 'deserializeWaardeType'
            ),
        );
    }

    public function deserializeWaardeType(
        XmlDeserializationVisitor $visitor,
        \SimpleXMLElement $data,
        array $type,
        DeserializationContext $context
    ) {
        $domElement = dom_import_simplexml($data);

        $typeName = $domElement->getAttributeNS(self::TYPE_NAMESPACE, self::TYPE_ATTRIBUTE);
        $type['name'] = $typeName;


//            '<formulier2data:Waarde i:type="formulier2data:DatumTijd"><formulier2data:Datum>2023-07-17T02:00:00+02:00</formulier2data:Datum></formulier2data:Waarde>',

    // TODO: deserialize above piece of xml so that it matches the i:type metadata

//        return new DatumTijd($datum);
    }
}

Мне нужно получить метаданные для типа DatumTijd или любого другого типа, который там определен.У меня уже есть все необходимые данные сопоставления в ./metadata/{types}.yml, но я не могу понять, как сопоставить их и вернуть правильный тип.

Любая помощь будет принята с благодарностью.

...