Пример #1
0
 public function __call($method, $args)
 {
     $driver = null;
     switch (config()->cache_driver()) {
         case 'memcached':
             $memcached = new \Memcached();
             $memcached->addServer(config()->cache_host(), 11211);
             $driver = new \Doctrine\Common\Cache\MemcachedCache();
             $driver->setMemcached($memcached);
             break;
         case 'apc':
             $driver = new \Doctrine\Common\Cache\ApcCache();
             break;
     }
     switch ($method) {
         case 'set':
             // $driver->delete($args[0]);
             $driver->save($args[0], json_encode($args[1]));
             break;
         case 'get':
             return json_decode($driver->fetch($args[0]));
             break;
     }
 }
Пример #2
0
 public function render($options)
 {
     $time_start = microtime(1);
     $request = $this->container->get('request');
     $env = $this->container->getParameter("kernel.environment");
     $routeParams = $request->get('_route_params');
     $options['@request_uri'] = $_SERVER['REQUEST_URI'];
     $cacheId = json_encode($options);
     //$cacheDriver = new \Doctrine\Common\Cache\FilesystemCache($_SERVER['DOCUMENT_ROOT'] . '/../app/cache/' . $env . '/sys/menu/');
     $cacheDriver = new \Doctrine\Common\Cache\ApcCache();
     $namespace = 'menu_' . $env . '_' . $options['id'];
     $this->logger->info('Menu ' . $options['id'] . ' NameSpace: ' . $namespace);
     $cacheDriver->setNamespace($namespace);
     if ($fooString = $cacheDriver->fetch($cacheId)) {
         $result = unserialize($fooString);
     } else {
         $array = $this->getArray($options['id']);
         $result = $this->getMenu($options, $array);
         $cacheDriver->save($cacheId, serialize($result));
     }
     echo $result;
     $time_end = microtime(1);
     $time = number_format(($time_end - $time_start) * 1000, 2);
     //echo $time.' мс';
 }
Пример #3
0
 public function elementsListAction($BLOCK_ID, $template_code, $section_id, $params, Request $request)
 {
     $host = $request->headers->get('host');
     $cacheId = 'Novuscom\\CMFBundle\\Controller\\elementsListAction(BLOCK_ID=' . $BLOCK_ID . ')';
     $env = $this->get('kernel')->getEnvironment();
     //$cache = new \Doctrine\Common\Cache\FilesystemCache($_SERVER['DOCUMENT_ROOT'] . '/../app/cache/' . $env . '/sys/' . $host . '/elements_list/');
     $cacheDriver = new \Doctrine\Common\Cache\ApcCache();
     if ($cacheDriver->contains($cacheId)) {
         //echo 'cache exists';
     } else {
         //echo 'cache does not exist';
     }
     if (false) {
         //if ($fooString = $cacheDriver->fetch($cacheId)) {
         //echo '<pre>' . print_r('ответ из кеша', true) . '</pre>';
         $render = unserialize($fooString);
     } else {
         /**
          * Переменные
          */
         $response = new Response();
         $em = $this->getDoctrine()->getManager();
         /**
          * Вычисление необходимой информации
          */
         $block = $em->getRepository('NovuscomCMFBundle:Block')->find($BLOCK_ID);
         //echo '<pre>' . print_r($block->getName(), true) . '</pre>';
         $ElementSection = $em->getRepository('NovuscomCMFBundle:ElementSection')->findBy(array('section' => $section_id));
         $elements_id = array();
         foreach ($ElementSection as $es) {
             //echo '<pre>' . print_r($es->getSection()->getName(), true) . '</pre>';
             $elements_id[] = $es->getElement()->getId();
         }
         $elements = array();
         if ($elements_id) {
             //$elements = $em->getRepository('NovuscomCMFBundle:Element')->findBy(array('id' => $elements_id));
             $repository = $this->getDoctrine()->getRepository('NovuscomCMFBundle:Element');
             $query = $repository->createQueryBuilder('p')->where('p.id IN(:id)')->setParameter('id', $elements_id)->orderBy('p.id', 'DESC')->getQuery();
             $elements = $query->getResult();
         } else {
             //echo '<pre>' . print_r('elements_id не указан', true) . '</pre>';
             //$elements = $em->getRepository('NovuscomCMFBundle:Element')->findBy(array('block' => $block));
             $repository = $this->getDoctrine()->getRepository('NovuscomCMFBundle:Element');
             $query = $repository->createQueryBuilder('p')->where('p.block = :block')->setParameter('block', $block)->orderBy('p.id', 'DESC')->getQuery();
             $elements = $query->getResult();
         }
         /**
          * HTTP кэширование
          */
         /*$lastModifiedTimes = array();
           $timesArray = array();
           foreach ($elements as $e) {
               //echo '<pre>' . print_r($e->getLastModified(), true) . '</pre>';
               $date = $e->getLastModified();
               //$dateTime = new \DateTime('now');
               $timestamp = $date->getTimestamp();
               $lastModifiedTimes[] = $timestamp;
               $timesArray[$timestamp] = $date;
           }
           if ($timesArray) {
               //echo '<pre>' . print_r($lastModifiedTimes, true) . '</pre>';
               $max = max($lastModifiedTimes);
               $response->setLastModified($timesArray[$max]);
               $eTag = $max;
               $response->setETag($eTag);
           }
           $response->setSharedMaxAge(10);
           $response->setMaxAge(10);
           */
         $data = array('block' => $block);
         /**
          * Получаем previewPictures
          */
         $preview_id = array();
         foreach ($elements as $e) {
             if ($e->getPreviewPicture()) {
                 $preview_id[] = $e->getPreviewPicture()->getId();
             }
         }
         if ($preview_id) {
             $em->getRepository('NovuscomCMFBundle:File')->findBy(array('id' => $preview_id));
         }
         $response->setMaxAge(60);
         $response->setSharedMaxAge(60);
         $render = $this->render('@templates/' . $params['template_directory'] . '/ElementsList/' . $template_code . '_.html.twig', array('elements' => $elements), $response);
         $cacheDriver->save($cacheId, serialize($render));
     }
     return $render;
 }
Пример #4
0
 public function ElementsListAction($params, Request $request)
 {
     if ($this->checkConstruction()) {
         return $this->constructionResponse();
     }
     /**
      * Переменные
      */
     $response = new Response();
     $em = $this->getDoctrine()->getManager();
     $page_repository = $em->getRepository('NovuscomCMFBundle:Page');
     $host = $request->headers->get('host');
     $cacheId = json_encode($params);
     $section_id = null;
     if (array_key_exists('section_id', $params)) {
         $section_id = $params['section_id'];
     }
     $template_code = 'default';
     if (array_key_exists('template_code', $params)) {
         $template_code = $params['template_code'];
     }
     $env = $this->get('kernel')->getEnvironment();
     $exist_page_id = array_key_exists('page_id', $params);
     if (!$exist_page_id) {
         $params['page_id'] = false;
     }
     if (!array_key_exists('LIMIT', $params)) {
         $params['LIMIT'] = null;
     }
     if (!array_key_exists('OPTIONS', $params)) {
         $params['OPTIONS'] = null;
     }
     /**
      * Кэш
      */
     //$cacheDriver = new \Doctrine\Common\Cache\FilesystemCache($_SERVER['DOCUMENT_ROOT'] . '/../app/cache/' . $env . '/sys/' . $host . '/components/ElementsList/');
     $cacheDriver = new \Doctrine\Common\Cache\ApcCache();
     $cacheDriver->setNamespace('ElementsListAction_' . $env . '_' . $params['BLOCK_ID']);
     //if (false) {
     if ($fooString = $cacheDriver->fetch($cacheId)) {
         //echo '<pre>' . print_r('есть такое в кеше', true) . '</pre>';
         $render = unserialize($fooString);
     } else {
         $response_data = array();
         //echo '<pre>' . print_r($params, true) . '</pre>';
         /**
          * Элементы
          */
         $ElementsList = $this->get('ElementsList');
         $ElementsList->setBlockId($params['BLOCK_ID']);
         $ElementsList->setSelect(array('code', 'last_modified', 'preview_picture', 'preview_text'));
         // TODO Здесь в сервисе ElementList - выбирать все свойства
         $ElementsList->selectProperties(array('address', 'shirota', 'anounce', 'long_name', 'date'));
         $ElementsList->setFilter(array('active' => true));
         $ElementsList->setLimit($params['LIMIT']);
         $ElementsList->setOrder(array('name', 'asc'));
         $elements = $ElementsList->getResult();
         /**
          * Данные попадающие в шаблон
          */
         $response_data['elements'] = $elements;
         $response_data['options'] = $params['OPTIONS'];
         $response_data['page'] = $page_repository->find($params['page_id']);
         $render = $this->render('@templates/' . $params['params']['template_directory'] . '/ElementsList/' . $template_code . '.html.twig', $response_data, $response);
         $cacheDriver->save($cacheId, serialize($render));
     }
     return $render;
 }