Api平台 - Symfony - 在持久化函数中返回json

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Api平台 - Symfony - 在持久化函数中返回json相关的知识,希望对你有一定的参考价值。

我需要在persist函数内返回一个Json Response。

这是我的DataPersister类的一个例子,它的目标是返回一个JsonResponse,当我尝试时,我得到错误:控制器必须返回一个“Symfony Component HttpFoundation Response ”对象,但它返回了一个App类型的对象实体 VerificationCodes。

<?php
// api/src/DataPersister/UsersDataPersister.php

namespace AppDataPersister;

use ApiPlatformCoreDataPersisterDataPersisterInterface;
use AppEntityUsers;
use DoctrineCommonPersistenceManagerRegistry;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpFoundationJsonResponse;

final class UsersDataPersister implements DataPersisterInterface 
{    
    private $managerRegistry;

    public function __construct(ManagerRegistry $managerRegistry)
    {
      $this->managerRegistry = $managerRegistry;
    }


    public function supports($data): bool
    {
        return $data instanceof Users;
    }

    public function persist($data){
        $em = $this->managerRegistry->getManagerForClass(Users::class);
        $user = new Users();
        //Persist User with encode password
        return $user;
        return new JsonResponse(['response'=>'yes']);
    }


    public function remove($data)
    {
      throw new RuntimeException('"remove" is not supported');
    }
}

请帮助我或告诉我我能做什么比你

答案

如果你想将AppEntityUsers类转换为JSON,你可以实现JsonSerializable inferface(是PHP本机接口)。此接口强制您实现在将对象转换为json时自动调用的方法jsonSerialized(例如,当您使用json_encode($user);时)。

最后你可以试试

class Users implements JsonSerializable
{
    public function jsonSerialize()
    {
        return []; // an array representation of your class
    }
}

然后你可以 ...

return new JsonResponse(json_encode($user));

或者可能) ...

return new JsonResponse($user);

以上是关于Api平台 - Symfony - 在持久化函数中返回json的主要内容,如果未能解决你的问题,请参考以下文章

symfony + api 平台 - 为路由创建别名

Symfony 4 API 平台和 JWT:如何使用 Symfony 客户端项目登录 API?

API 平台 Symfony 5 JWT 访问控制

使用带有 api 平台和 symfony 的转换器时,GET 结果为空

CORS..Angular 和 API 平台 Symfony 的问题

如何在 Symfony2 中单向持久化一对一实体