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; } }
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.' мс'; }
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; }
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; }