Newscoop\Services\PublicationService::publicationResolver PHP Method

publicationResolver() public method

Resolve publication from provided data
public publicationResolver ( Request $request ) : Publication
$request Symfony\Component\HttpFoundation\Request Request object
return Newscoop\Entity\Publication $publication Publication entity object
    public function publicationResolver(Request $request)
    {
        /**
         * By default try get publication alias from requested http_host
         */
        $publication = $request->server->get('HTTP_HOST');
        $this->publicationMetadata['source'] = 'request_http_host';
        /**
         * If in request GET or POST params exists 'publication' use it.
         */
        if ($request->query->has('__publication_alias_name') || $request->request->has('__publication_alias_name')) {
            $publication = $request->get('__publication_alias_name');
            $this->publicationMetadata['source'] = 'optional_parameter';
        }
        $cacheKey = $this->cacheService->getCacheKey(array('resolver', $publication, $this->publicationMetadata['source']), 'publication');
        $alias = array();
        if ($this->cacheService->contains($cacheKey)) {
            $alias = $this->cacheService->fetch($cacheKey);
        } else {
            $qb = $this->em->getRepository('Newscoop\\Entity\\Aliases')->createQueryBuilder('a');
            $qb->select('a.id as aliasId', 'p.id as publicationId', 'a.name as alias', 'p.name as publicationName', 'l.id as languageId', 'l.code as languageCode')->leftJoin('a.publication', 'p')->leftJoin('p.language', 'l')->where('a.name = :name')->setParameter('name', $publication);
            $alias = $qb->getQuery()->getArrayResult();
            $this->cacheService->save($cacheKey, $alias);
        }
        if (empty($alias)) {
            return null;
        }
        $this->publicationMetadata['alias'] = array('name' => $alias[0]['alias'], 'publication_id' => $alias[0]['publicationId']);
        $this->publicationMetadata['publication'] = array('name' => $alias[0]['publicationName'], 'id_default_language' => $alias[0]['languageId'], 'code_default_language' => $alias[0]['languageCode']);
        /**
         * Save publication metadata to into Request attributes.
         */
        $request->attributes->set('_newscoop_publication_metadata', $this->publicationMetadata);
        $aliasObject = $this->em->getReference('Newscoop\\Entity\\Aliases', $alias[0]['aliasId']);
        $publicationObject = $this->em->getReference('Newscoop\\Entity\\Publication', $alias[0]['publicationId']);
        $this->setPublicationAlias($aliasObject);
        $this->setPublication($publicationObject);
        return $publicationObject;
    }

Usage Example

コード例 #1
0
 public function onRequest(GetResponseEvent $event)
 {
     if ($event->getRequest()->get('_route') != 'newscoop_get_img') {
         $this->publicationService->publicationResolver($event->getRequest());
     }
 }