我正在使用api平臺(https://api-platform.com/)我的網站的框架,我試圖用不同的標準多次序列化一個實體的集合。我創建了下面的例子實體:API-平臺定製過濾收集作爲屬性
EntityWithFilteredCollection
namespace AppBundle\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ApiResource(attributes={"normalization_context"={"groups"={"get"}}})
* @ORM\Entity()
*/
class EntityWithFilteredCollection
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
* @Groups({"get"})
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\FilteredCollectionRelatedEntity", mappedBy="relatedEntity")
*/
private $relatedEntities;
/**
* @Groups({"get"})
*/
private $filteredEntities;
public function __construct()
{
$this->relatedEntities = new ArrayCollection();
}
public function getId()
{
return $this->id;
}
public function getRelatedEntities()
{
return $this->relatedEntities;
}
public function setRelatedEntities($relatedEntities)
{
$this->relatedEntities = $relatedEntities;
}
public function getFilteredEntities()
{
return $this->filteredEntities;
}
public function setFilteredEntities($filteredEntities)
{
$this->filteredEntities = $filteredEntities;
}
}
FilteredCollectionRelatedEntity
namespace AppBundle\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ApiResource(attributes={"normalization_context"={"groups"={"get"}}})
* @ORM\Entity()
*/
class FilteredCollectionRelatedEntity
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
* @Groups({"get"})
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\RelatedEntity", inversedBy="relatedEntites")
*/
protected $relatedEntity;
/**
* @ORM\Column(type="integer")
* @Groups({"get"})
*/
protected $value;
/**
* @ORM\Column(type="boolean")
* @Groups({"get"})
*/
protected $condition;
public function getId()
{
return $this->id;
}
public function getRelatedEntity()
{
return $this->relatedEntity;
}
public function setRelatedEntity($relatedEntity)
{
$this->relatedEntity = $relatedEntity;
}
public function getValue()
{
return $this->value;
}
public function setValue($value)
{
$this->value = $value;
}
public function getCondition()
{
return $this->condition;
}
public function setCondition($condition)
{
$this->condition = $condition;
}
}
而且對於教義後裝載事件的事件訂閱:
namespace AppBundle\EventSubscriber;
use AppBundle\Entity\EntityWithFilteredCollection;
use AppBundle\Entity\FilteredCollectionRelatedEntity;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
class FilterCollectionSubscriber implements EventSubscriber
{
/** @var RequestStack */
private $requestStack;
public function __construct(TokenStorage $tokenStorage, RequestStack $requestStack)
{
$this->tokenStorage = $tokenStorage;
$this->requestStack = $requestStack;
}
public function postLoad(LifecycleEventArgs $event)
{
$entity = $event->getEntity();
$method = $this->requestStack->getCurrentRequest()->getMethod();
if (!$entity instanceof EntityWithFilteredCollection || Request::METHOD_GET !== $method) {
return;
}
$entity->setFilteredEntities($entity->getRelatedEntities()->filter(function (FilteredCollectionRelatedEntity $entity) {
return $entity->getCondition();
}));
}
/**
* Returns an array of events this subscriber wants to listen to.
*
* @return array
*/
public function getSubscribedEvents()
{
return [
'postLoad'
];
}
}
當我嘗試檢索一個EntityWithFilteredCollection h的具有設置爲true我得到下面的異常狀態值一些FilteredCollectionRelatedEntity實體:
No resource class found for object of type "AppBundle\Entity\FilteredCollectionRelatedEntity"
我是不是走錯了路?我錯過了什麼嗎? 當我不嘗試序列化過濾的集合,但它的工作原始,但我得到的所有實體。