Symfony RestBundle: аннотация @View перестала работать после обновления v2 - PullRequest
0 голосов
/ 04 июня 2018

Я думаю, что существует конфликт между сериализатором JMS и FOSRestBundle: я получаю пустой объект json вместо id и accessToken.Мне не хватает документации v2?

config.yml

fos_rest:
    routing_loader:
        default_format: json
        include_format: false
    format_listener: true
    view:
        view_response_listener: 'force'
        formats:
            json: true
        templating_formats:
            html: false
            json: false
    body_converter:
        enabled: true

Контроллер

class SecurityController extends FOSRestController
{
     *
     * @View(serializerGroups={"login"})
     *
     */
    public function postLoginAction(Request $request)
    {
            // $user = MyOAuthUserResponse extends AbstractUserResponse

           // before upgrade I just use: return $this->view($user);

            $view = $this->view($user);

            $context = new Context();
            $context->addGroup('login');

            $view->setContext($context);

            return $this->handleView($view);
    }

Сущность

/**
 * @Serializer\ExclusionPolicy("All")
 */
class User extends BaseUser
{

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     * @Serializer\Expose()
     */
    protected $id;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="created", type="datetime")
     * @Gedmo\Timestampable(on="create")
     */
    private $created;

    /**
     * @var string
     * @ORM\Column(type="string", nullable=true)
     * @Serializer\Expose()
     */
    private $accessToken;

1 Ответ

0 голосов
/ 04 июня 2018

Это нашло проблему!

В vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php:209

$exclusionStrategy = $context->getExclusionStrategy(); // Returns NULL

Что, кажется, работает нормально (до обновления) с:

return $this->view($user);

Но после обновления возвращается $ exclusionStrategy:

JMS\Serializer\Exclusion\GroupsExclusionStrategy Object
(
    [groups:JMS\Serializer\Exclusion\GroupsExclusionStrategy:private] => Array
        (
            [login] => 1
        )

    [nestedGroups:JMS\Serializer\Exclusion\GroupsExclusionStrategy:private] => 

)

Чтобы исправить это, я удалил код контекста, который я передал представлению, и передал view в handleview, например:

return $this->handleView($this->view($user));

Я ошибся в этом обновлении документа :

use FOS\RestBundle\Context\Context;

$view = new View();

$context = new Context();
$view->setContext($context);

$context = $view->getContext();
...