首页 > 解决方案 > Symfony 4.0 - 达到“512”的最大函数嵌套级别,中止

问题描述

我正在使用Symfony 4.0 构建一个 Web 应用程序。我已经使用 JWT 创建了一个身份验证系统,并且当数据库中的用户名和密码匹配时,我有一个返回令牌的端点。

我创建了一个函数来获取当前用户的用户详细信息,我创建了该函数以便我可以使用 JavaScript 在我的 Web 应用程序中构建标题(即根据登录用户权限的适当链接)。

但是,当我调用 /api/users/current 时,会出现以下错误:

已达到“512”的最大函数嵌套级别,正在中止!

端点似乎正在返回与用户相关的所有实体,但我不知道为什么会这样。

用户控制器:

<?php

namespace App\Controller\Api;

use App\Controller\BaseController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\User\UserInterface;

class UserController extends BaseController
{
/**
 * @Route("/api/users/current")
 * @Method("GET")
 * @param UserInterface $user
 * @return Response
 */
public function getCurrentUser(UserInterface $user){
    $response = $this->createApiResponse($user, 200);

    return $response;
}
}

基础控制器:

<?php

namespace App\Controller;

use JMS\Serializer\SerializationContext;
use JMS\Serializer\Serializer;
use JMS\Serializer\SerializerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

abstract class BaseController extends AbstractController
{
private $serializer;

public function __construct(SerializerInterface $serializer)
{
    $this->serializer = $serializer;
}

/**
 * @param $data
 * @param int $statusCode
 * @return Response
 */
protected function createApiResponse($data, $statusCode = 200)
{
    $json = $this->serialize($data);
    return new Response($json, $statusCode, array(
        'Content-Type' => 'application/json'
    ));
}

/**
 * @param Serializer $serializer
 * @param $data
 * @param string $format
 * @return mixed
 */
protected function serialize($data, $format = 'json')
{
    $context = new SerializationContext();
    $context->setSerializeNull(true);

    return $this->serializer->serialize($data, $format, $context);
}
}

标签: phpapisymfony

解决方案


推荐阅读