Передать параметры в ClassMethodsHydrator в конфигурации zend-expressive-hal

Я использую zend-expressive-hal (v3) и написал следующую конфигурацию для доставки моего класса User:

return [
    [
        '__class__' => RouteBasedResourceMetadata::class,
        'resource_class' => Handler\User::class,
        'route' => 'users',
        'extractor' => ClassMethodsHydrator::class,
    ],
];

Это работает без проблем. Однако я заметил, что ключи хранятся в сгенерированном JSON с символами подчеркивания, тогда как в моем классе User методы написаны в верблюжьем регистре. Как я могу дополнить приведенную выше конфигурацию, чтобы передать параметры классу ClassMethodsHydrator, например. underscoreSeparatedKeys = false?


person altralaser    schedule 14.11.2019    source источник


Ответы (1)


Очевидно, я не использую последнюю версию Zend Hydrator, поэтому у меня нет класса Zend\Hydrator\ClassMethodsHydrator. Я построил свой собственный гидратор (я точно знаю, что у объектов есть геттеры и сеттеры для каждого свойства):

class ObjectWithGetterAndSetterHydrator extends AbstractHydrator
{

    public function extract($object)
    {
        if (!$object instanceof ApiEntityInterface) {
            throw new \RuntimeException('Could not extract object. Object must be instance of ' . ApiEntityInterface::class);
        }
        /** @var ApiEntityInterface $object */

        $properties = $object::getExportableProperties();
        $data       = [];
        foreach ($properties as $property) {
            $data[$property] = method_exists($object, 'get' . ucfirst($property)) ? $object->{'get' . ucfirst($property)}() : $object->{'is' . ucfirst($property)}();
        }

        return $data;
    }


    public function hydrate(array $data, $object)
    {
        foreach ($data as $key => $value) {
            $object->{'set' . ucfirst($key)}($value);
        }
    }
}
person Razvan Ionascu    schedule 15.11.2019