/**
* @param Criteria $criteria
* @return SearchResults
*/
public function search(Criteria $criteria)
{
!$this->objectDefinition->canSearch() && $this->throwUnsupportedMethodException();
$this->eventDispatcher->dispatch(RestEvents::PRE_SEARCH, new PreSearchEvent($criteria));
/** @var \Doctrine\Common\Persistence\Mapping\ClassMetadata $metadata */
$metadata = $this->getManager()->getClassMetadata($this->getClass());
foreach ($criteria as $key => $value) {
if (!$metadata->hasField($key) && !$metadata->hasAssociation($key)) {
$criteria->remove($key);
}
}
$allObjects = $this->getRepository()->findBy($criteria->toArray(), $criteria->getOrderBy());
$objects = array_slice($allObjects, $criteria->getOffset(), $criteria->getLimit());
$results = new SearchResults($objects, count($allObjects));
$this->eventDispatcher->dispatch(RestEvents::POST_SEARCH, new PostSearchEvent($results));
return $results;
}