public function testDisableCache() { // disable cache $this->structure->getCacheLifeTime()->willReturn(0); $this->response->setPublic()->shouldNotBeCalled(); $this->response->setMaxAge($this->maxAge)->shouldNotBeCalled(); $this->response->setSharedMaxAge($this->sharedMaxAge)->shouldNotBeCalled(); $this->handler->updateResponse($this->response->reveal(), $this->structure->reveal()); }
/** * * * @param Event $event An Event instance */ public function filter(Event $event, Response $response) { if (!$configuration = $event->get('request')->attributes->get('_cache')) { return $response; } if (!$response->isSuccessful()) { return $response; } if (null !== $configuration->getSMaxAge()) { $response->setSharedMaxAge($configuration->getSMaxAge()); } if (null !== $configuration->getMaxAge()) { $response->setMaxAge($configuration->getMaxAge()); } if (null !== $configuration->getExpires()) { $date = \DateTime::create(\DateTime::createFromFormat('U', $configuration->getExpires(), new \DateTimeZone('UTC'))); $response->setLastModified($date); } return $response; }
/** * @Template() * @Route("/packages.json", name="packages", defaults={"_format" = "json"}) */ public function packagesAction(Request $req) { // fallback if any of the dumped files exist $rootJson = $this->container->getParameter('kernel.root_dir') . '/../web/packages_root.json'; if (file_exists($rootJson)) { return new Response(file_get_contents($rootJson)); } $rootJson = $this->container->getParameter('kernel.root_dir') . '/../web/packages.json'; if (file_exists($rootJson)) { return new Response(file_get_contents($rootJson)); } if ($req->getHost() === 'packagist.org') { $this->get('logger')->alert('packages.json is missing and the fallback controller is being hit'); return new Response('Horrible misconfiguration or the dumper script messed up', 404); } $em = $this->get('doctrine')->getManager(); gc_enable(); $packages = $em->getRepository('Packagist\\WebBundle\\Entity\\Package')->getFullPackages(); $notifyUrl = $this->generateUrl('track_download', array('name' => 'VND/PKG')); $data = array('notify' => str_replace('VND/PKG', '%package%', $notifyUrl), 'packages' => array()); foreach ($packages as $package) { $versions = array(); foreach ($package->getVersions() as $version) { $versions[$version->getVersion()] = $version->toArray(); $em->detach($version); } $data['packages'][$package->getName()] = $versions; $em->detach($package); } unset($versions, $package, $packages); $response = new Response(json_encode($data), 200); $response->setSharedMaxAge(120); return $response; }
/** * Renders page header links with cache control. * * @return \Symfony\Component\HttpFoundation\Response */ public function userLinksAction() { $response = new Response(); $response->setSharedMaxAge(3600); $response->setVary('Cookie'); return $this->render('eZDemoBundle::page_header_links.html.twig', array(), $response); }
public function sitemapAction() { $ttl = 3600 * 6; $response = new Response(); $response->headers->set('Content-Type', 'text/xml'); $response->setPublic(); $response->setSharedMaxAge($ttl); $siteaccessName = $this->container->get('ezpublish.siteaccess')->name; $cacheFile = $this->container->getParameter('kernel.cache_dir') . '/sitemap_' . $siteaccessName . '.xml'; $cacheFileMtime = 0; if (file_exists($cacheFile)) { $cacheFileMtime = stat($cacheFile)['mtime']; } if ($cacheFileMtime < time() - $ttl) { $urls = array(); $hostname = $this->getRequest()->getHost(); $publishToolsService = $this->get('cjw_publishtools.service.functions'); $rootLocationId = $this->getConfigResolver()->getParameter('content.tree_root.location_id'); $listLocations = $publishToolsService->fetchLocationListArr(array($rootLocationId), array('depth' => 10, 'limit' => 25000, 'main_location_only' => true, 'datamap' => false)); foreach ($listLocations[$rootLocationId]['children'] as $location) { $loc = $this->generateUrl($location); $lastmod = date('c', $location->contentInfo->modificationDate->getTimestamp()); $urls[] = array('loc' => $loc, 'lastmod' => $lastmod); } $sitemapXmlResponse = $this->render('CjwPublishToolsBundle::sitemap.xml.twig', array('urls' => $urls, 'hostname' => 'https://' . $hostname), $response); file_put_contents($cacheFile, $sitemapXmlResponse->getContent()); } else { $sitemapXmlResponse = $response->setContent(file_get_contents($cacheFile)); } return $sitemapXmlResponse; }
/** * Displays the list of blog_post * Note: This is a fully customized controller action, it will generate the response and call * the view. Since it is not calling the ViewControler we don't need to match a specific * method signature. * * @param \eZ\Publish\API\Repository\Values\Content\Location $location containing blog posts * @return \Symfony\Component\HttpFoundation\Response */ public function listBlogPostsAction(Location $location, Request $request) { $response = new Response(); // Setting default cache configuration (you can override it in you siteaccess config) $response->setSharedMaxAge($this->getConfigResolver()->getParameter('content.default_ttl')); // Make the response location cache aware for the reverse proxy $response->headers->set('X-Location-Id', $location->id); $response->setVary('X-User-Hash'); $viewParameters = $request->attributes->get('viewParameters'); // Getting location and content from ezpublish dedicated services $repository = $this->getRepository(); if ($location->invisible) { throw new NotFoundHttpException("Location #{$location->id} cannot be displayed as it is flagged as invisible."); } $content = $repository->getContentService()->loadContentByContentInfo($location->getContentInfo()); // Getting language for the current siteaccess $languages = $this->getConfigResolver()->getParameter('languages'); // Using the criteria helper (a demobundle custom service) to generate our query's criteria. // This is a good practice in order to have less code in your controller. $criteria = $this->get('ezdemo.criteria_helper')->generateListBlogPostCriterion($location, $viewParameters, $languages); // Generating query $query = new Query(); $query->query = $criteria; $query->sortClauses = array(new SortClause\Field('blog_post', 'publication_date', Query::SORT_DESC, $languages[0])); // Initialize pagination. $pager = new Pagerfanta(new ContentSearchAdapter($query, $this->getRepository()->getSearchService())); $pager->setMaxPerPage($this->container->getParameter('ezdemo.blog.blog_post_list.limit')); $pager->setCurrentPage($request->get('page', 1)); return $this->render('eZDemoBundle:full:blog.html.twig', array('location' => $location, 'content' => $content, 'pagerBlog' => $pager), $response); }
public function indexAction(Request $request) { //mini formulaire d'abonnement $news = new Newsletter(); $form = $this->createFormBuilder($news)->add('news', 'email')->add('Envoyer', 'submit')->getForm(); $form->handleRequest($request); if ($form->isValid()) { $email = $news->getNews(); $message = \Swift_Message::newInstance()->setSubject('Bonjour')->setFrom($email)->setTo('*****@*****.**')->setBody('Bonjour Fabrice cet email : ' . $email . ' souhaite un abonnement à votre newsletter, cordialement'); $this->get('mailer')->send($message); return $this->redirect($this->generateUrl('front_homepage')); } $essais = $this->getCat('essais'); $arr = $this->get('front.base.service')->recupInfo(); $arr['essais'] = $essais; $arr['nav_accueil'] = ' '; $arr['nav_xix'] = ' '; $arr['nav_essais'] = 'active'; $arr['nav_litt'] = ' '; $arr['nav_audio'] = ' '; $arr['nav_video'] = ' '; $arr['nav_info'] = ' '; $arr['newsletter'] = $form->createView(); $response = new Response(); if ($this->getRequest()->isMethod('GET')) { $response->setPublic(); $response->setSharedMaxAge(1); $response->setVary(array('Accept-Encoding', 'User-Agent')); } return $this->render('FrontBundle:Essais:index.html.twig', $arr, $response); }
/** * @Template() * @Route("/packages.json", name="packages", defaults={"_format" = "json"}) */ public function packagesAction() { // fallback if any of the dumped files exist $rootJson = $this->container->getParameter('kernel.root_dir') . '/../web/packages_root.json'; if (file_exists($rootJson)) { return new Response(file_get_contents($rootJson)); } $rootJson = $this->container->getParameter('kernel.root_dir') . '/../web/packages.json'; if (file_exists($rootJson)) { return new Response(file_get_contents($rootJson)); } $em = $this->get('doctrine')->getEntityManager(); gc_enable(); $packages = $em->getRepository('Packagist\\WebBundle\\Entity\\Package')->getFullPackages(); $notifyUrl = $this->generateUrl('track_download', array('name' => 'VND/PKG')); $data = array('notify' => str_replace('VND/PKG', '%package%', $notifyUrl), 'packages' => array()); foreach ($packages as $package) { $versions = array(); foreach ($package->getVersions() as $version) { $versions[$version->getVersion()] = $version->toArray(); $em->detach($version); } $data['packages'][$package->getName()] = $versions; $em->detach($package); } unset($versions, $package, $packages); $response = new Response(json_encode($data), 200); $response->setSharedMaxAge(120); return $response; }
/** * Cache the response 1 year (31536000 sec) */ protected function cacheResponse(Response $response) { $response->setSharedMaxAge(31536000); $response->setMaxAge(31536000); $response->setExpires(new \DateTime('+1 year')); return $response; }
/** * Renders page header links with cache control * * @return \Symfony\Component\HttpFoundation\Response */ public function userLinksAction() { $response = new Response(); $response->setSharedMaxAge(3600); $response->setVary('Cookie'); return $this->render("BCPageLayoutOverrideTestBundle::page_header_links.html.twig", array(), $response); }
/** * @Route("/catalog/fulltree", name="spb_shop_catalog_fulltree") */ public function fullTreeAction() { $em = $this->getDoctrine()->getManager(); $repo = $em->getRepository('SpbShopBundle:Category'); $controller = $this; $options = array('decorate' => true, 'rootOpen' => '<ul class="dropdown-menu">', 'rootClose' => '</ul>', 'childOpen' => function ($child) { if ($child['rgt'] - $child['lft'] == 1) { return '<li>'; } else { return '<li class="dropdown-submenu">'; } }, 'childClose' => '</li>', 'nodeDecorator' => function ($node) use(&$controller) { return '<a href="' . $controller->generateUrl('spb_shop_catalog_category', array('slug' => $node['slug'], 'tag' => $node['tag'])) . '">' . $node['title'] . '</a>'; }); $htmlTree = $repo->childrenHierarchy(null, false, $options); $response = new Response($htmlTree); // пометить ответ как public или private $response->setPublic(); //$response->setPrivate(); // // установить max age для private и shared ответов $response->setMaxAge(6000); $response->setSharedMaxAge(6000); // установить специальную директиву Cache-Control $response->headers->addCacheControlDirective('must-revalidate', true); return $response; }
/** * Controller for top menu * @param int $currentLocationId * * @return Response */ public function topMenuAction($currentLocationId) { $rootLocationId = $this->getConfigResolver()->getParameter('content.tree_root.location_id'); $response = new Response(); $parameters = array(); $helper = $this->get('bananamanu_simple_design.subelement_helper'); $menu = $helper->getSubElementLocation($rootLocationId); // Get current master try { $currentLocation = $this->getRepository()->getLocationService()->loadLocation($currentLocationId); $pathString = explode('/', $currentLocation->pathString); if ((int) $pathString[3] > 0) { $currentMasterLocationId = $pathString[3]; } else { $currentMasterLocationId = $rootLocationId; } } catch (\Exception $e) { $currentMasterLocationId = $rootLocationId; } // Get current user $user = $this->getRepository()->getCurrentUser(); // Cache control $response->setSharedMaxAge(84600); $response->setVary('X-User-Hash'); $response->setPublic(); $parameters['menu'] = $menu; $parameters['user'] = $user; $parameters['currentMasterLocationId'] = $currentMasterLocationId; return $this->render('BananamanuSimpleDesignBundle::page_topmenu.html.twig', $parameters, $response); }
public function testSetSharedMaxAge() { $response = new Response(); $response->setSharedMaxAge(20); $cacheControl = $response->headers->get('Cache-Control'); $this->assertEquals('public, s-maxage=20', $cacheControl); }
/** * Renders the tag. * * @param \Netgen\TagsBundle\API\Repository\Values\Tags\Tag $tag * @param \Symfony\Component\HttpFoundation\Request $request * * @return \Symfony\Component\HttpFoundation\Response */ protected function renderTag(Tag $tag, Request $request) { $configResolver = $this->getConfigResolver(); if ($this->adapter instanceof TagAdapterInterface) { $this->adapter->setTag($tag); } $pager = new Pagerfanta($this->adapter); $pager->setMaxPerPage($configResolver->getParameter('tag_view.related_content_list.limit', 'eztags')); $pager->setCurrentPage($request->get('page', 1)); $response = new Response(); $response->headers->set('X-Tag-Id', $tag->id); if ($configResolver->getParameter('tag_view.cache', 'eztags') === true) { $response->setPublic(); if ($configResolver->getParameter('tag_view.ttl_cache', 'eztags') === true) { $response->setSharedMaxAge($configResolver->getParameter('tag_view.default_ttl', 'eztags')); } // Make the response vary against X-User-Hash header ensures that an HTTP // reverse proxy caches the different possible variations of the // response as it can depend on user role for instance. if ($request->headers->has('X-User-Hash')) { $response->setVary('X-User-Hash'); } $response->setLastModified($tag->modificationDate); } return $this->render($configResolver->getParameter('tag_view.template', 'eztags'), array('tag' => $tag, 'pager' => $pager), $response); }
/** * {@inheritdoc} */ public function update(Response $response) { // if we have no embedded Response, do nothing if (0 === $this->embeddedResponses) { return; } // Remove validation related headers in order to avoid browsers using // their own cache, because some of the response content comes from // at least one embedded response (which likely has a different caching strategy). if ($response->isValidateable()) { $response->setEtag(null); $response->setLastModified(null); $this->cacheable = false; } if (!$this->cacheable) { $response->headers->set('Cache-Control', 'no-cache, must-revalidate'); return; } $this->ttls[] = $response->getTtl(); $this->maxAges[] = $response->getMaxAge(); if (null !== ($maxAge = min($this->maxAges))) { $response->setSharedMaxAge($maxAge); $response->headers->set('Age', $maxAge - min($this->ttls)); } $response->setMaxAge(0); }
/** * @Route("/{_locale}", name="donate_front_home", defaults={"_locale"="fr"}, requirements = {"_locale" = "fr|en"}) */ public function indexAction(Request $request, $_locale) { //cache validation tjrs public, c'est l'ESI qui gère la sidebar $response = new Response(); $response->setPublic(); $response->setSharedMaxAge(3600); $data = new Customer(); $layoutMgr = $this->get('donate_core.layout.manager'); $layout = $layoutMgr->getDefault($_locale); $form = $this->createForm(new DonationType($this->get('translator')), $data, array('civilities' => $this->getParameter('donate_front.form.civility'), 'equivalences' => $this->get('donate_core.equivalence.factory')->getAll(), 'payment_methods' => $this->get('donate_core.payment_method_discovery')->getEnabledMethods(), 'affectations' => $layout->getAffectations())); $form->handleRequest($request); if ($form->isValid()) { $intentMgr = $this->get('donate_core.intent_manager'); $paymentMethods = $this->get('donate_core.payment_method_discovery')->getEnabledMethods(); foreach ($paymentMethods as $pm) { if ($form->get('payment_method')->get($pm->getId())->isClicked()) { $amount = $form->get('tunnels')->get($pm->getTunnel())->getData(); $intent = $intentMgr->newIntent($amount, $pm->getId()); $intent->setFiscalReceipt($form['erf']->getData()); //add affectation if any $intent->setAffectationCode($form['affectations']->getData()); $data->addIntent($intent); $em = $this->getDoctrine()->getManager(); $em->persist($data); $em->flush(); $response = $intentMgr->handle($intent); return $response; } } } return $this->render('DonateFrontBundle:Form:index.html.twig', array('form' => $form->createView()), $response); }
private function getResponse(Request $request, $name, array $files, $content_type) { if (!isset($files[$name])) { return new Response('Not Found', 404, array('Content-Type' => 'text/plain')); } $file = $files[$name]; $response = new Response(); $response->setPublic(); $response->setMaxAge(self::EXPIRED_TIME); $response->setSharedMaxAge(self::EXPIRED_TIME); $response->headers->set('Content-Type', $content_type); // set a custom Cache-Control directive $response->headers->addCacheControlDirective('must-revalidate', true); $date = new \DateTime(); $date->setTimestamp(strtotime($this->container->getParameter('sf.version'))); $response->setETag($date->getTimestamp()); $response->setLastModified($date); if ($response->isNotModified($request)) { return $response; } if (!file_exists($file)) { throw new \Exception(sprintf("file `%s`, `%s` not exists", $name, $file)); } $response->setContent(file_get_contents($file)); return $response; }
/** * Update a valid non cacheable Response with http cache headers * * @see http://symfony.com/fr/doc/current/book/http_cache.html */ public function handleResponse(Response $response) { // do not handle invalid response if (!$response->isOk()) { return $response; } // do not handle response with http cache headers if ($response->isCacheable()) { return $response; } // seek for optional configuration $this->readRoutingConfiguration(); // mark the response as private $response->setPrivate(); // set the private or shared max age $response->setMaxAge($this->duration); $response->setSharedMaxAge($this->duration); // set expires $date = new \DateTime(); $date->modify(sprintf('+%d seconds', $this->duration)); $response->setExpires($date); // set a custom Cache-Control directive $response->headers->addCacheControlDirective('must-revalidate', true); return $response; }
/** * @return Response */ private function getEmptyXmlResponse() { $response = new Response(null, Response::HTTP_OK, ['Content-type' => 'text/xml', 'X-Robots-Tag' => 'noindex']); $sharedMaxAge = $this->getServiceContainer()->getParameter('werkspot.sitemap.cache.shared_max_age'); $response->setSharedMaxAge($sharedMaxAge); return $response; }
/** * Index Action * * @return Response */ public function indexAction() { $response = new Response(); $response->setPublic(); $response->setSharedMaxAge(86400); // 1 day return $this->render('UnifikSystemBundle:Frontend/Home:index.html.twig', [], $response); }
/** * Creates a Symfony response, and apply appropriate caching headers * @param $config array * @param $image string * @return Response */ protected function generateResponse($config, $image) { $response = new Response($image, 200, array('Content-Type' => 'image/png')); $response->setPublic(); $response->setMaxAge($config['time']); $response->setSharedMaxAge($config['time']); return $response; }
/** * @Route("/news/latest", name="latest") * @param $maxPerPage * @return Response */ public function latestAction($maxPerPage) { $response = new Response(); // mark the response as either public $response->setPublic(); // ... $response->setSharedMaxAge(60); return $response; }
/** * @Method("GET") * @Route("/", name="homepage", options={"sitemap" = true}) */ public function defaultAction() { $response = new Response(); $response->setPublic(); $response->setMaxAge(60); $response->setSharedMaxAge(60); $response->setContent($this->renderView('page/homepage.html.twig')); return $response; }
public static function createFromImage(Image $image, $status, $maxage = 3600, $smaxage = 3600) { $response = new Response((string) $image, $status); $response->headers->set('Content-Type', 'image/svg+xml;charset=utf-8'); $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_INLINE, $image->getOutputFileName()); $response->headers->set('Content-Disposition', $contentDisposition); $response->setMaxAge($maxage); $response->setSharedMaxAge($smaxage); return $response; }
/** * Google Verification route * * @param string $key * @Route("/google{key}.html", requirements={ "key": "[a-zA-Z0-9]*" }) * @Method("GET") * @throws NotFoundHttpException * @return Response */ public function googleVerifAction($key) { if ($this->getConfigResolver()->getParameter('google_verification', 'novae_zseo') != $key) { throw new NotFoundHttpException("Google Verification Key not found"); } $response = new Response(); $response->setSharedMaxAge(24 * 3600); $response->setContent("google-site-verification: google{$key}.html"); return $response; }
private function updateHeaders(Response $response, Response $subResponse) { if ($this->response->isCacheable() && $subResponse->isCacheable()) { $maxAge = (int) min($response->headers->getCacheControlDirective('max-age'), $subResponse->headers->getCacheControlDirective('max-age')); $sMaxAge = (int) min($response->headers->getCacheControlDirective('s-maxage'), $subResponse->headers->getCacheControlDirective('s-maxage')); $response->setSharedMaxAge($sMaxAge); $response->setMaxAge($maxAge); } else { $this->response->headers->set('Cache-Control', 'no-cache, must-revalidate'); } }
/** * @param Request $request * * @return \Symfony\Component\HttpFoundation\Response */ public function embedAction(Request $request) { $response = new Response(); $response->setPrivate(); $response->setMaxAge(0); $response->setSharedMaxAge(0); $response->headers->addCacheControlDirective('must-revalidate', true); $response->headers->addCacheControlDirective('no-store', true); $response->headers->set(HttpCache::HEADER_REVERSE_PROXY_TTL, 0); return $this->render($this->getTemplate(Configuration::TYPE_LOGIN, Configuration::TEMPLATE_FORM_EMBED), ['user' => $this->getUser()], $response); }
/** * @Template() * @Route("/packages.json", name="packages") */ public function packagesAction() { $packages = $this->get('doctrine')->getRepository('Packagist\\WebBundle\\Entity\\Package')->getFullPackages(); $data = array(); foreach ($packages as $package) { $data[$package->getName()] = $package->toArray(); } $response = new Response(json_encode($data), 200, array('Content-Type' => 'application/json')); $response->setSharedMaxAge(60); return $response; }
/** * Updates the Response HTTP headers based on the embedded Responses. * * @param Response $response */ public function update(Response $response) { if (!$this->cacheable) { $response->headers->set('Cache-Control', 'no-cache, must-revalidate'); return; } $maxAge = min($this->maxAges); $response->setSharedMaxAge($maxAge); $response->setMaxAge(0); $response->headers->set('Age', $maxAge - min($this->ttls)); }
/** * Set response max age * * @param Response $response * @param string $status * @param int $maxAge * @param bool $hasEsi */ protected function setResponseMaxAge(Response $response, $status, $maxAge, $hasEsi) { if (-1 === $maxAge) { $maxAge = 2629743; } if (true === $hasEsi && CacheableInterface::CACHE_PUBLIC == $status) { $response->setSharedMaxAge($maxAge); } else { $response->setMaxAge($maxAge); } }