gpt4 book ai didi

json - 使用 GetSetMethodNormalizer 到 Json 的 Doctrine 实体返回 fatal error

转载 作者:行者123 更新时间:2023-12-03 22:46:00 26 4
gpt4 key购买 nike

几天以来,我一直在使用 Doctrine 2 和 Zend 框架。
我正在跨 yaml 文件生成我的实体。
现在我遇到了一个问题,将我的实体 Doctrine 转换为 Json 格式(以便通过 AJAX 使用它)。

这是使用的代码:

    $doctrineobject = $this->entityManager->getRepository('\Entity\MasterProduct')->find($this->_request->id);
$serializer = new \Symfony\Component\Serializer\Serializer(array(new Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer()), array('json' => new Symfony\Component\Serializer\Encoder\JsonEncoder()));

$reports = $serializer->serialize($doctrineobject, 'json');

以下是我得到的返回:

fatal error :达到“100”的最大函数嵌套级别,正在中止!在/Users/Sites/library/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php 第 185 行

问题似乎与此处相同:
http://comments.gmane.org/gmane.comp.php.symfony.symfony2/2659

但没有提出适当的解决方案。

知道我该怎么做吗?

干杯

最佳答案

我通过编写自己的 GetSetNormalizer 我的类(class)解决了同样的问题。在类中定义静态变量以进行分支

class LimitedRecursiveGetSetMethodNormalizer extends GetSetMethodNormalizer
{
public static $limit=2;
/**
* {@inheritdoc}
*/
public function normalize($object, $format = null)
{
$reflectionObject = new \ReflectionObject($object);
$reflectionMethods = $reflectionObject->getMethods(\ReflectionMethod::IS_PUBLIC);

$attributes = array();
foreach ($reflectionMethods as $method) {
if ($this->isGetMethod($method)) {
$attributeName = strtolower(substr($method->name, 3));
$attributeValue = $method->invoke($object);
if (null !== $attributeValue && !is_scalar($attributeValue) && LimitedRecursiveGetSetMethodNormalizer::$limit>0) {
LimitedRecursiveGetSetMethodNormalizer::$limit--;
$attributeValue = $this->serializer->normalize($attributeValue, $format);
LimitedRecursiveGetSetMethodNormalizer::$limit++;
}

$attributes[$attributeName] = $attributeValue;
}
}

return $attributes;
}

/**
* Checks if a method's name is get.* and can be called without parameters.
*
* @param ReflectionMethod $method the method to check
* @return Boolean whether the method is a getter.
*/
private function isGetMethod(\ReflectionMethod $method)
{
return (
0 === strpos($method->name, 'get') &&
3 < strlen($method->name) &&
0 === $method->getNumberOfRequiredParameters()
);
}
}

和用法
    LimitedRecursiveGetSetMethodNormalizer::$limit=3;
$serializer = new Serializer(array(new LimitedRecursiveGetSetMethodNormalizer()), array('json' => new
JsonEncoder()));
$response =new Response($serializer->serialize($YOUR_OBJECT,'json'));

关于json - 使用 GetSetMethodNormalizer 到 Json 的 Doctrine 实体返回 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37272012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com