setVary() public method

Sets the Vary header.
public setVary ( string | array $headers, boolean $replace = true ) : Response
$headers string | array
$replace boolean Whether to replace the actual value or not (true by default)
return Response
Example #1
0
 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);
 }
Example #2
0
 /**
  * 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);
 }
 /**
  * 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);
 }
 /**
  * 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);
 }
Example #5
0
 /**
  * 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);
 }
 /**
  * Renders aside content regarding current user
  *
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function viewUserInfoAction()
 {
     $user = $this->getRepository()->getCurrentUser();
     $response = new Response();
     $response->setVary('X-User-Hash');
     $response->setSharedMaxAge(300);
     $response->setPublic();
     $params = array();
     $params['time'] = time();
     $params['user'] = $user;
     return $this->render('BananamanuCacheDemoBundle:aside:user_info.html.twig', $params, $response);
 }
Example #7
0
 public function showPageAction($id, $extraParams = null, $currentpage = null, $totalpageitems = null, $linkUrlParams = null)
 {
     // Get data to display
     $page = $this->getDoctrine()->getRepository('BlogBundle:Blog')->find($id);
     $userRole = $this->get('sonata_user.services.helpers')->getLoggedUserHighestRole();
     $settings = $this->get('bardiscms_settings.load_settings')->loadSettings();
     // Simple ACL for publishing
     if ($page->getPublishState() == 0) {
         return $this->render404Page();
     }
     if ($page->getPublishState() == 2 && $userRole == '') {
         return $this->render404Page();
     }
     if ($userRole == "") {
         $publishStates = array(1);
     } else {
         $publishStates = array(1, 2);
     }
     if ($this->container->getParameter('kernel.environment') == 'prod' && $settings->getActivateHttpCache()) {
         $response = new Response();
         // set a custom Cache-Control directive
         $response->headers->addCacheControlDirective('must-revalidate', true);
         // set multiple vary headers
         $response->setVary(array('Accept-Encoding', 'User-Agent'));
         // create a Response with a Last-Modified header
         $response->setLastModified($page->getDateLastModified());
         // Set response as public. Otherwise it will be private by default.
         $response->setPublic();
         //var_dump($response->isNotModified($this->getRequest()));
         //var_dump($response->getStatusCode());
         if (!$response->isNotModified($this->getRequest())) {
             // Marks the Response stale
             $response->expire();
         } else {
             // return the 304 Response immediately
             $response->setSharedMaxAge(3600);
             return $response;
         }
     }
     // Set the website settings and metatags
     $page = $this->get('bardiscms_settings.set_page_settings')->setPageSettings($page);
     // Set the pagination variables
     if (!$totalpageitems) {
         if (is_object($settings)) {
             $totalpageitems = $settings->getBlogItemsPerPage();
         } else {
             $totalpageitems = 10;
         }
     }
     // Render the correct view depending on pagetype
     return $this->renderPage($page, $id, $publishStates, $extraParams, $currentpage, $totalpageitems, $linkUrlParams);
 }
 public function testFilledBoth()
 {
     $listener = $this->getInstance(['1', '3', '4']);
     $response = new Response();
     $response->setVary(['1', '2']);
     $event = $this->getEvent($response);
     $listener->onKernelResponse($event);
     $this->assertContains('1', $response->getVary());
     $this->assertContains('2', $response->getVary());
     $this->assertContains('3', $response->getVary());
     $this->assertContains('4', $response->getVary());
     $this->assertCount(4, $response->getVary());
 }
 protected function setStaticPageResponseHeaders(Response $response, array $options = array())
 {
     //1 week
     //$seconds = 604800;
     // set to 1 week or even longer once we know that the content for our
     // static pages (about-us, terms-of-use, privacy-policy) have been finalized
     $seconds = 600;
     $response->setPublic();
     $response->setMaxAge($seconds);
     $response->setSharedMaxAge($seconds);
     $response->setVary(array('Accept-Encoding'));
     return $response;
 }
Example #10
0
 protected function _prepareResponse($etag, $modifed = null, $expires = " +300 seconds", $s_max_age = 600, $max_age = 300)
 {
     $response = new Response();
     $currentTime = new \DateTime();
     $req = $this->getRequest();
     $deviceView = $this->m_deviceView->getViewType();
     $response->setExpires($currentTime->modify($expires));
     $response->setETag(md5($etag . $deviceView . $req->headers->get('x-forwarded-proto')));
     $response->setPublic();
     $response->setMaxAge($max_age);
     $response->setSharedMaxAge($s_max_age);
     if ($modifed) {
         $response->setLastModified($modifed);
     }
     $response->setVary(array('x-device-type', 'x-forwarded-proto'));
     return $response;
 }
 /**
  * @param Response $response
  */
 public function apply(Response $response)
 {
     if (empty($this->parameters['enabled'])) {
         return;
     }
     $this->parameters['public'] ? $response->setPublic() : $response->setPrivate();
     if (is_integer($this->parameters['maxage'])) {
         $response->setMaxAge($this->parameters['maxage']);
     }
     if (is_integer($this->parameters['smaxage'])) {
         $response->setSharedMaxAge($this->parameters['smaxage']);
     }
     if ($this->parameters['expires'] !== null) {
         $response->setExpires(new \DateTime($this->parameters['expires']));
     }
     if (!empty($this->parameters['vary'])) {
         $response->setVary($this->parameters['vary']);
     }
 }
 /**
  * Return latest content for footer.
  *
  * @param $currentContentId
  *
  * @return Response
  */
 public function latestContentAction($currentContentId)
 {
     $locationService = $this->getRepository()->getLocationService();
     $contentService = $this->getRepository()->getContentService();
     // Get the root location through ConfigResolver.
     $rootLocationId = $this->getConfigResolver()->getParameter('content.tree_root.location_id');
     $rootLocation = $locationService->loadLocation($rootLocationId);
     $response = new Response();
     $response->setPublic();
     $response->setSharedMaxAge(86400);
     $response->headers->set('X-Location-Id', $rootLocationId);
     $response->setVary('X-User-Hash');
     // Build our exclude criterion.
     // We just want to exclude locations for current content which are under root location.
     $excludeLocations = $locationService->loadLocations($contentService->loadContentInfo($currentContentId), $rootLocation);
     $excludeCriterion = $this->get('ezdemo.criteria_helper')->generateLocationIdExcludeCriterion($excludeLocations);
     // Retrieve latest content through the MenuHelper.
     // We only want articles that are located somewhere in the tree under root location.
     $latestContent = $this->get('ezdemo.menu_helper')->getLatestContent($rootLocation, $this->container->getParameter('ezdemo.footer.latest_content.content_types'), $excludeCriterion, $this->container->getParameter('ezdemo.footer.latest_content.limit'));
     return $this->render('eZDemoBundle:footer:latest_content.html.twig', array('latestContent' => $latestContent), $response);
 }
 /**
  * Return the response to the context hash request with a header containing
  * the generated hash.
  *
  * If the ttl is bigger than 0, cache headers will be set for this response.
  *
  * @param GetResponseEvent $event
  */
 public function onKernelRequest(GetResponseEvent $event)
 {
     if ($event->getRequestType() != HttpKernelInterface::MASTER_REQUEST) {
         return;
     }
     if (!$this->requestMatcher->matches($event->getRequest())) {
         return;
     }
     $hash = $this->hashGenerator->generateHash();
     // status needs to be 200 as otherwise varnish will not cache the response.
     $response = new Response('', 200, array($this->hashHeader => $hash, 'Content-Type' => 'application/vnd.fos.user-context-hash'));
     if ($this->ttl > 0) {
         $response->setClientTtl($this->ttl);
         $response->setVary($this->userIdentifierHeaders);
         $response->setPublic();
     } else {
         $response->setClientTtl(0);
         $response->headers->addCacheControlDirective('no-cache');
     }
     $event->setResponse($response);
 }
Example #14
0
 /**
  * Displays the list of article.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Location $location of a folder
  * @param \Symfony\Component\HttpFoundation\Request $request request object
  * @throws NotFoundHttpException $location is flagged as invisible
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function showFolderListAction(Request $request, Location $location)
 {
     $response = new Response();
     if ($location->invisible) {
         throw new NotFoundHttpException("Location #{$location->id} cannot be displayed as it is flagged as invisible.");
     }
     $response->setSharedMaxAge($this->getConfigResolver()->getParameter('content.default_ttl'));
     $response->headers->set('X-Location-Id', $location->id);
     $response->setVary('X-User-Hash');
     $content = $this->getRepository()->getContentService()->loadContentByContentInfo($location->getContentInfo());
     // Getting language for the current siteaccess
     $languages = $this->getConfigResolver()->getParameter('languages');
     $excludedContentTypes = $this->container->getParameter('ezdemo.folder.folder_view.excluded_content_types');
     // 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')->generateListFolderCriterion($location, $excludedContentTypes, $languages);
     // Generating query
     $query = new LocationQuery();
     $query->query = $criteria;
     $query->sortClauses = array(new SortClause\DatePublished());
     // Initialize pagination.
     $pager = new Pagerfanta(new ContentSearchAdapter($query, $this->getRepository()->getSearchService()));
     $pager->setMaxPerPage($this->container->getParameter('ezdemo.folder.folder_list.limit'));
     $pager->setCurrentPage($request->get('page', 1));
     $includedContentTypeIdentifiers = $this->container->getParameter('ezdemo.folder.folder_tree.included_content_types');
     // Get sub folder structure
     $subContentCriteria = $this->get('ezdemo.criteria_helper')->generateSubContentCriterion($location, $includedContentTypeIdentifiers, $languages);
     $subContentQuery = new LocationQuery();
     $subContentQuery->query = $subContentCriteria;
     $subContentQuery->sortClauses = array(new SortClause\ContentName());
     $searchService = $this->getRepository()->getSearchService();
     $subContent = $searchService->findLocations($subContentQuery);
     $treeItems = array();
     foreach ($subContent->searchHits as $hit) {
         $treeItems[] = $hit->valueObject;
     }
     return $this->get('ez_content')->viewLocation($location->id, 'full', true, ['pagerFolder' => $pager, 'treeItems' => $treeItems]);
 }
 /**
  * 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();
     $pager = new Pagerfanta(new RelatedContentAdapter($tag, $this->tagsService));
     $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);
 }
 /**
  * Build the response so that depending on settings it's cacheable
  *
  * @param string|null $etag
  * @param \DateTime|null $lastModified
  *
  * @return \Symfony\Component\HttpFoundation\Response
  */
 protected function buildResponse($etag = null, DateTime $lastModified = null)
 {
     $request = $this->getRequest();
     $response = new Response();
     if ($this->getParameter('content.view_cache') === true) {
         $response->setPublic();
         if ($etag !== null) {
             $response->setEtag($etag);
         }
         if ($this->getParameter('content.ttl_cache') === true) {
             $response->setSharedMaxAge($this->getParameter('content.default_ttl'));
         }
         // 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');
         }
         if ($lastModified != null) {
             $response->setLastModified($lastModified);
         }
     }
     return $response;
 }
 public function testHasVary()
 {
     $response = new Response();
     $this->assertFalse($response->hasVary());
     $response->setVary('User-Agent');
     $this->assertTrue($response->hasVary());
 }
Example #18
0
 /**
  * Set the authentication cookie in the response.
  *
  * @param Response $response
  * @param string   $token
  *
  * @return Response
  */
 protected function setAuthenticationCookie(Response $response, $token)
 {
     $response->setVary('Cookies', false)->setMaxAge(0)->setPrivate();
     $response->headers->setCookie(new Cookie($this->app['token.authentication.name'], $token, time() + $this->getOption('general/cookies_lifetime'), $this->resources()->getUrl('root'), $this->getOption('general/cookies_domain'), $this->getOption('general/enforce_ssl'), true));
     return $response;
 }
Example #19
0
 protected function setResponceCacheHeaders(Response $response)
 {
     $response->setPublic();
     $response->setLastModified($this->page->getDateLastModified());
     $response->setVary(array('Accept-Encoding', 'User-Agent'));
     $response->headers->addCacheControlDirective('must-revalidate', true);
     $response->setSharedMaxAge(3600);
     return $response;
 }
 /**
  * @param Request $request
  *
  * @return Response
  */
 public function footerAction(Request $request)
 {
     $response = new Response();
     $response->setPublic();
     $response->setSharedMaxAge(600);
     $response->setVary('Accept-Encoding', 'User-Agent');
     return $this->engine->renderResponse('@CertificationyWeb/Site/footer.html.twig', ['trainings' => $this->certificationManager->getCertifications()]);
 }