<?php
namespace Bidcoz\Bundle\CoreBundle\Request\ParamConverter;
use Bidcoz\Bundle\CoreBundle\Entity\Organization;
use Doctrine\ORM\EntityManager;
use RS\DiExtraBundle\Annotation as DI;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\ParamConverterInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* @DI\Service
* @DI\Tag("request.param_converter", attributes={"converter"="organization", "priority"="10"})
*/
class OrganizationParamConverter implements ParamConverterInterface
{
private $em;
/**
* @DI\InjectParams({
* "em" = @DI\Inject("doctrine.orm.default_entity_manager")
* })
*/
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function apply(Request $request, ParamConverter $configuration)
{
$slug = $request->attributes->get('orgSlug');
$organization = $this->em
->getRepository(Organization::class)
->findOneBySlug($slug);
if (!$organization) {
throw new NotFoundHttpException('Organization not found.');
}
$param = $configuration->getName();
$request->attributes->set($param, $organization);
return true;
}
public function supports(ParamConverter $configuration)
{
return "Bidcoz\Bundle\CoreBundle\Entity\Organization" === $configuration->getClass();
}
}