@prozrost

Как получить обьект с fosuserbundle?

Сделал простенькое API для User, который берется с fosUserBundle. Создал запись в БД вручную(такое себе конечно же)
Вылазит теперь ошибка:
{"error":{"code":500,"message":"Internal Server Error","exception":[{"message":"Notice: unserialize(): Error at offset 0 of 13 bytes","class":"Symfony\\Component\\Debug\\Exception\\ContextErrorException","trace":[{"namespace":"","short_class":"","class":"","type":"","function":"","file":"H:\\xampp\\htdocs\\rest_test\\vendor\\doctrine\\dbal\\lib\\Doctrine\\DBAL\\Types\\ArrayType.php","line":58,"args":[]},{"namespace":"Doctrine\\DBAL\\Types","short_class":"ArrayType","class":"Doctrine\\DBAL\\Types\\ArrayType","type":"->","function":"convertToPHPValue","file":"H:\\xampp\\htdocs\\rest_test\\vendor\\doctrine\\orm\\lib\\Doctrine\\ORM\\Internal\\Hydration\\SimpleObjectHydrator.php","line":131,"args":[["string","Admin,Default"],["object","Doctrine\\DBAL\\Platforms\\MySqlPlatform"]]},

Это как то связано с тем что у roles тип array, может у кого такое было,как вы это решили?
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
DarkRaven
@DarkRaven
разработка программного обеспечения
У пользователя есть связи?
Я бы порекомендовал отдавать плоские DTO, формируемые из модели. Данное DTO будет содержать только те данные, которые реально нужны.

пример плоского класса
<?php

namespace AppBundle\Entity\Dto;

use AppBundle\Other\Arr;

/**
 * User
 * 
 */
class UserDTO
{

    /**
     *
     * @var int
     */
    public $id;

    /**
     *
     * @var string
     */
    public $login;

    /**
     *
     * @var int
     */
    public $dzoId;

    /**
     *
     * @var string
     */
    public $dzoName;

    /**
     * Roles
     * @var string
     */
    public $roles;

    /**
     *
     * @var string
     */
    public $fullname;

    /**
     *
     * @var string
     */
    public $email;

    public function __construct(\AppBundle\Entity\User $userInfo)
    {
        $this->id = $userInfo->getId();
        $this->login = $userInfo->getUsername();
        $dzo = $userInfo->getDzo();
        if ($dzo != null) {
            $this->dzoId = $dzo->getId();
            $this->dzoName = $dzo->getName();
        }
        $this->roles = $this->plainRoles($userInfo);
        $this->email = $userInfo->getEmail();
        $this->fullname = $userInfo->getFullname();
    }

    private function plainRoles(\AppBundle\Entity\User $user)
    {
        $roles = $user->getRoles();
        return join(',', $roles);
    }

    private function getRolesInfo($str)
    {
        $parts = explode('-::-', $str);
        $roles = [];

        foreach ($parts as $p) {
            $deserialized = \unserialize($p);
            $roles = array_merge($roles, $deserialized);
        }

        return join(',', array_unique($roles));
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы