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 sections_listAction($block_id = false, $section_id = null, $template_code = "default", $get_elements = null, $params) { //$cache = new \Doctrine\Common\Cache\FilesystemCache($_SERVER['DOCUMENT_ROOT'] . '/../app/cache/sys/components/sections_list/'); $cache = new \Doctrine\Common\Cache\ApcCache(); $cacheId = md5(json_encode(array('block_id' => $block_id, 'section_id' => $section_id, 'template_code' => $template_code, 'get_elements' => $get_elements))); //echo '<pre>' . print_r($cache->fetch($cacheId), true) . '</pre>'; if ($fooString = $cache->fetch($cacheId)) { //echo '<pre>' . print_r('возвращаем закешированные данные', true) . '</pre>'; $render = unserialize($fooString); } else { //echo '<pre>' . print_r('возвращаем не закешированные данные', true) . '</pre>'; $em = $this->getDoctrine()->getManager(); //echo '<pre>' . print_r($block_id, true) . '</pre>'; if (is_numeric($block_id)) { //$sections = $em->getRepository('NovuscomCMFBundle:Section')->findBy(array('block' => $block_id, 'lvl' => 0)); //echo '<pre>' . print_r($block_id, true) . '</pre>'; $repository = $em->getRepository('NovuscomCMFBundle:Section'); $query = $repository->createQueryBuilder('p')->where('p.block = :block_id')->setParameters(array('block_id' => $block_id))->orderBy('p.sort', 'ASC')->getQuery(); $sections = $query->getResult(); /*foreach($sections as $s) { echo '<pre>' . print_r($s->getName(), true) . '</pre>'; }*/ } else { //echo '<pre>' . print_r('notfound', true) . '</pre>'; throw $this->createNotFoundException(''); } if (is_int($section_id)) { $repository = $em->getRepository('NovuscomCMFBundle:Section'); $query = $repository->createQueryBuilder('p')->where('p.id = :section_id')->setParameter('section_id', $section_id)->orderBy('p.sort', 'ASC')->getQuery(); $sections = $query->getResult(); } $this->setSectionsElements($sections); $response = new Response(); $data = array(); $data['sections'] = $sections; //echo '<pre>' . print_r($template_code, true) . '</pre>'; $render = $this->render('@templates/' . $params['params']['template_directory'] . '/SectionsList/' . $template_code . '.html.twig', $data, $response); } return $render; }
public function elementAction($id, Request $request, $template_code = 'default') { $host = $request->headers->get('host'); $cacheId = 'id=[' . $id . ']'; $env = $this->get('kernel')->getEnvironment(); //$cache = new \Doctrine\Common\Cache\FilesystemCache($_SERVER['DOCUMENT_ROOT'] . '/../app/cache/'.$env.'/sys/'.$host.'/element/'); $cache = new \Doctrine\Common\Cache\ApcCache(); if ($fooString = $cache->fetch($cacheId)) { //echo '<pre>' . print_r('есть кэш '.$cacheId, true) . '</pre>'; $response = unserialize($fooString); } else { $element = new FrontElement(); $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('NovuscomCMFBundle:Element')->find($id); $element->setInfo($entity); $propertyFiles = $em->getRepository('NovuscomCMFBundle:ElementPropertyF')->findBy(array('element' => $entity, 'property_id' => 26)); foreach ($propertyFiles as $pf) { //echo '<pre>' . print_r($pf->getFile(), true) . '</pre>'; $element->addPropertyFile($pf->getFile()); } //echo '<pre>' . print_r($entity->getName(), true) . '</pre>'; if ($entity) { $templatePath = 'CMFTemplateBundle:Element:' . $template_code . '.html.twig'; $response = $this->render($templatePath, array('element' => $element)); } else { $response = new Response('<div>Элемент не найден</div>'); } $cache->save($cacheId, serialize($response)); } return $response; }
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; }