php-Symfony Restful API-公开当前登录用户的isLiked虚拟属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-Symfony Restful API-公开当前登录用户的isLiked虚拟属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1892字,纯文字阅读大概需要3分钟。
内容图文
有两个实体Restaurant和Users.餐馆实体与用户,字段名称favoriteBy具有多对多关系.
<many-to-many field="favoriteBy" target-entity="UserBundle\Entity\Users" mapped-by="favoriteRestaurants"/>
我正在将JMS序列化程序与FOSRestfulAPI一起使用.在餐厅列表API中,我必须公开一个额外的布尔字段“ isFavorited”,如果当前登录的用户在数组集合favoriteBy中,则为true.
我如何才能找到当前用户是否喜欢实体中的餐厅?
/**
* Get is favorited
* @JMS\VirtualProperty()
* @JMS\Groups({"listing", "details"})
*/
public function isFavorited()
{
// some logic in entity
return false;
}
我在想的一种方法是将当前用户对象注入到实体中,并且用户包含方法可以找出来,但是它看起来并不是一个好方法.
请给我建议一些方法,或指导我正确的方向.
解决方法:
您可以按照here in the doc的说明实现EventSubscriberInterface.
例如:
use JMS\Serializer\EventDispatcher\EventSubscriberInterface;
use JMS\Serializer\EventDispatcher\ObjectEvent;
...
class RestaurantSerializerSubscriber implements EventSubscriberInterface
{
protected $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
public static function getSubscribedEvents()
{
return [
[
'event' => 'serializer.post_serialize',
'class' => Restaurant::class,
'method' => 'onPostSerialize',
],
];
}
public function onPostSerialize(ObjectEvent $event)
{
$visitor = $event->getVisitor();
$restaurant = $event->getObject();
// your custom logic
$isFavourite = $this->getCurrentUser()->isFavourite($restaurant);
$visitor->addData('isFavorited', $isFavourite);
}
/**
* Return the logged user.
*
* @return User
*/
protected function getCurrentUser()
{
return $this->tokenStorage->getToken()->getUser();
}
并注册,以YML为例:
acme.restaurant_serializer_subscriber:
class: Acme\DemoBundle\Subscriber\RestaurantSerializerSubscriber
arguments: ["@security.token_storage"]
tags:
- { name: "jms_serializer.event_subscriber" }
希望这个帮助
PS:您也可以拦截选择的序列化组,如果您不喜欢该代码,请告诉我.
内容总结
以上是互联网集市为您收集整理的php-Symfony Restful API-公开当前登录用户的isLiked虚拟属性全部内容,希望文章能够帮你解决php-Symfony Restful API-公开当前登录用户的isLiked虚拟属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。