当前位置: 首页 > 面试题库 >

如何在Symfony 2.0 AJAX应用程序中将Doctrine实体编码为JSON?

田修为
2023-03-14
问题内容

我正在开发游戏应用程序并使用Symfony 2.0。我有许多对后端的AJAX请求。更多的响应是将实体转换为JSON。例如:

class DefaultController extends Controller
{           
    public function launchAction()
    {   
        $user = $this->getDoctrine()
                     ->getRepository('UserBundle:User')                
                     ->find($id);

        // encode user to json format
        $userDataAsJson = $this->encodeUserDataToJson($user);
        return array(
            'userDataAsJson' => $userDataAsJson
        );            
    }

    private function encodeUserDataToJson(User $user)
    {
        $userData = array(
            'id' => $user->getId(),
            'profile' => array(
                'nickname' => $user->getProfile()->getNickname()
            )
        );

        $jsonEncoder = new JsonEncoder();        
        return $jsonEncoder->encode($userData, $format = 'json');
    }
}

我所有的控制器都做同样的事情:获取一个实体并将其某些字段编码为JSON。我知道我可以使用规范化器并对所有实体进行编码。但是,如果一个实体循环链接到另一个实体该怎么办?还是实体图很大?你有什么建议吗?

我考虑了一些实体的编码方案…或NormalizableInterface用于避免循环..,


问题答案:

另一个选择是使用JMSSerializerBundle。然后在您的控制器中执行

$serializer = $this->container->get('serializer');
$reports = $serializer->serialize($doctrineobject, 'json');
return new Response($reports); // should be $reports as $doctrineobject is not serialized

您可以通过使用实体类中的注释来配置序列化的方式。请参阅上面链接中的文档。例如,以下是如何排除链接的实体:

 /**
* Iddp\RorBundle\Entity\Report
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Iddp\RorBundle\Entity\ReportRepository")
* @ExclusionPolicy("None")
*/
....
/**
* @ORM\ManyToOne(targetEntity="Client", inversedBy="reports")
* @ORM\JoinColumn(name="client_id", referencedColumnName="id")
* @Exclude
*/
protected $client;


 类似资料:
  • 问题内容: 假设我有实体。是否有任何通用方法将其存储为另一行,该行将具有相同的实体数据但具有另一个主键? 为什么需要这个:我正在实现某种临时数据库模式,而不是更新行,而只需要创建另一行。 问题答案: 尝试克隆并将以下方法添加到您的实体中 您可能需要先分离实体,然后再保留它。我现在没有开发机可以方便地对此进行测试。 更新资料 刚刚尝试使用简单的SQLite演示。您不需要做任何事情。以下对我有用,而无

  • 问题内容: 如何在Doctrine 2.0中编写此SQL查询(并获取结果)? 问题答案: 好吧,我发现也许是最好的解决方案: 然后是两个类( NotificationGroup 和 NotificationEvent ),它们扩展了 Notification :

  • 问题内容: 我正在尝试解码一些HTML实体,例如变为。 我有一个古老的宝石(html_helpers),但它似乎已经被抛弃了两次。 有什么建议吗?我将需要在模型中使用它。 问题答案: HTMLEntities可以做到:

  • 最近开始使用react原生和project要求在服务器上构建应用程序。所以理论是,应用程序可以根据请求构建,这意味着一些东西,让我们称之为react原生编译器,需要在某个服务器上,允许我这样做。 例如,这是react native compiler位于“http://example.com/compile”的位置,您在该站点上有一些设置选项和按钮“Compile”,当您单击按钮时,应用程序编译器启

  • 问题内容: 我在允许用户输入内容的CMS中工作。问题在于,当他们添加符号时,它可能无法在所有浏览器中正常显示。我想设置一个必须搜索的符号列表,然后将其转换为相应的html实体。例如 ®=> &=> ©=> ™=> 转换后,需要将其包装在标签中,从而导致: => 由于必须使用特定的字体大小和填充样式: JavaScript会是这样吗? “ [?]”的意思是说我不确定。 额外细节: 我想使用纯Java

  • 问题内容: 我正在开始使用Google App Engine。我想像Twitter一样进行AJAX聊天。 服务器JSON对响应进行编码, 结果:您好! 还行吧。但是替换RPCHandler 结果:错误。服务器不可访问(获取) 如何对实体进行JSON编码? 问题答案: 在App Engine Python中,您可以使用此脚本将db.Models编码为JSON。您可能必须自定义某些部分,例如DateT