ZF2, Apigility с доктриной и встроенными атрибутами

Я пытаюсь получить некоторые данные, используя два вложенных запроса через два репозитория доктрин:

$user = $this->_objectManager->getRepository('\Application\Entity\User')->
findOneBy(array("hash" => $data));
$id_user = $user->getId();
$user_credits = $this->_objectManager->getRepository('\Application\Entity\UserCredits')->
findOneBy(array("user_id" => $id_user));
return $user_credits;

Я применяю некоторые гидраторы в module.config.php:

'Application\\Entity\\User' => array(
                'entity_identifier_name' => 'id',
                'route_name' => 'client-api.rest.getcredits',
                'route_identifier_name' => 'getcredits_id',
                'hydrator' => 'Zend\\Stdlib\\Hydrator\\ArraySerializable',
            ),
            'Application\\Entity\\UserCredits' => array(
                'entity_identifier_name' => 'credits',
                'route_name' => 'client-api.rest.getcredits',
                'route_identifier_name' => 'getcredits_id',
                'hydrator' => 'Zend\\Stdlib\\Hydrator\\ArraySerializable',
            ),

И в каждой сущности доктрины я настраиваю getArrayCopy() следующим образом:

Пользователь:

public function getArrayCopy()
    {
        return array(
            'id'=>$this->getId(),
            'phone'=>$this->getPhone(),
        );
    }

UserCredits:

 public function getArrayCopy()
    {
        return array(
            'id'=>$this->getUser(),
            'credits'=>$this->getCredits(),
        );
    }

И вот результат:

{"credits":100,"_embedded":{"id":{"id":10,"phone":123456789,"_links":{"self":{"href":"http:\/\/testserver.test\/getcredits\/10"}}}},"_links":{"self":{"href":"http:\/\/testserver.test\/getcredits\/100"}}}

Но мне бы хотелось, чтобы результат был примерно таким:

{"credits":100,"id":10},"_links":......

Как я могу сделать это возможным? Почему ID встраивается в него?

1 ответ

Он встроен, потому что вы возвращаете объект.

'id' => $this->getUser()

В этом случае id будет объект типа User и этот объект будет встроен из-за extractEmbeddedEntity метод вызывается внутри renderEntity метод Hal плагин

Просто измените на:

'id' => $this->getUser()->getId()

и вы получите желаемый результат.

Другие вопросы по тегам