public function SectionsMenu($options)
 {
     /*
      * Настроки кеширования
      */
     $env = $this->container->getParameter("kernel.environment");
     $cacheDriver = new \Doctrine\Common\Cache\ApcuCache();
     $namespace = 'menu_section_' . $env . '_' . $options['BLOCK_ID'];
     $cacheDriver->setNamespace($namespace);
     // засекаем время
     $time_start = microtime(1);
     /*
      * Добавляем текущую страницу в id кеша
      */
     $request = $this->container->get('request_stack')->getMasterRequest();
     $routeParams = $request->attributes->get('_route_params');
     $currentCode = false;
     if (array_key_exists('SECTION_CODE', $routeParams)) {
         $currentCode = trim($routeParams['SECTION_CODE'], '/');
     }
     //$currentCode = trim($routeParams['CODE'], '/');
     $options['@currentCode'] = $currentCode;
     // id кеша
     $cacheId = json_encode($options);
     if ($fooString = $cacheDriver->fetch($cacheId)) {
         //if (false) {
         /*
          * Выдаем результат из кеша
          */
         $result = unserialize($fooString);
     } else {
         /*
          * Генерируем результат
          */
         $SectionClass = $this->container->get('SectionClass');
         $tree = $SectionClass->SectionsList(array('block_id' => $options['BLOCK_ID']));
         //echo '<pre>' . print_r('tree on SectionMenu', true) . '</pre>';
         //echo '<pre>' . print_r($tree, true) . '</pre>';
         $factory = new MenuFactory();
         $menu = $factory->createItem('root');
         //echo '<pre>' . print_r($routeName, true) . '</pre>';
         //echo '<pre>' . print_r($routeParams, true) . '</pre>';
         $this->generateMenuFromTree($tree, $menu, $options['route'], $currentCode);
         $menuRenderer = $this->getMenuRenderer();
         $result = $menuRenderer->render($menu, array('template' => $options['template'], 'currentAsLink' => false));
         /*
          * Сохраняем результат в кеш
          */
         $cacheDriver->save($cacheId, serialize($result));
     }
     echo $result;
     $time_end = microtime(1);
     $time = number_format(($time_end - $time_start) * 1000, 2);
     //echo $time.' мс';
 }
 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\ApcuCache();
     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;
 }