Jas*_*lan 7 symfony jmsserializerbundle jms-serializer
正如标题所说,我正在尝试做出是否在序列化中包含字段的运行时决定.就我而言,这个决定将基于权限.
我正在使用Symfony 2,所以我要做的是添加一个名为@ExcludeIf的附加注释,它接受一个安全表达式.
我可以处理元数据的注释解析和存储,但我无法看到如何将自定义排除策略与库集成.
有什么建议?
注意:排除策略是JMS代码库中的实际构造,我只是无法找出在其他代码库之上集成额外内容的最佳方法
PS:之前我曾经问过这个问题,并指出要使用小组.由于各种原因,这对我的需求来说是一个非常差的解决方案
rol*_*ebi 10
您只需要创建一个实现的类 JMS\Serializer\Exclusion\ExclusionStrategyInterface
<?php
namespace JMS\Serializer\Exclusion;
use JMS\Serializer\Metadata\ClassMetadata;
use JMS\Serializer\Metadata\PropertyMetadata;
use JMS\Serializer\Context;
interface ExclusionStrategyInterface
{
/**
* Whether the class should be skipped.
*
* @param ClassMetadata $metadata
*
* @return boolean
*/
public function shouldSkipClass(ClassMetadata $metadata, Context $context);
/**
* Whether the property should be skipped.
*
* @param PropertyMetadata $property
*
* @return boolean
*/
public function shouldSkipProperty(PropertyMetadata $property, Context $context);
}
Run Code Online (Sandbox Code Playgroud)
你的情况,你可以实现自己的自定义逻辑的shouldSkipProperty方法,总是返回false了shouldSkipClass.
可以在JMS/Serializer存储库中找到实现示例
我们将参考acme.my_exclusion_strategy_service下面创建的服务.
在您的控制器操作中:
<?php
use Symfony\Component\HttpFoundation\Response;
use JMS\Serializer\SerializationContext;
// ....
$context = SerializationContext::create()
->addExclusionStrategy($this->get('acme.my_exclusion_strategy_service'));
$serial = $this->get('jms_serializer')->serialize($object, 'json', $context);
return new Response($serial, Response::HTTP_OK, array('Content-Type' => 'application/json'));
Run Code Online (Sandbox Code Playgroud)
或者如果您使用的是FOSRestBundle
<?php
use FOS\RestBundle\View;
use JMS\Serializer\SerializationContext;
// ....
$context = SerializationContext::create()
->addExclusionStrategy($this->get('acme.my_exclusion_strategy_service'))
$view = new View($object);
$view->setSerializationContext($context);
// or you can create your own view factory that handles the creation
// of the context for you
return $this->get('fos_rest.view_handler')->handle($view);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5821 次 |
| 最近记录: |