2014-09-02 2 views
0

내 탐색 헤더 템플릿에 쿠키를 실행하고 표시하려고합니다.symfony2 페이지로드 후 생성 된 쿠키

현재 내 컨트롤러는 사용자가 로그인했는지 확인합니다. 로그인하지 않은 상태에서 쿠키를 확인합니다. 쿠키가 없으면 일반 쿠키가 만들어집니다. 그리고 마지막으로 템플릿이로드됩니다.

현재 쿠키가 생성되고 템플릿이 제대로로드되지만 템플릿을 렌더링 할 때 전달 된 값은 페이지가로드 된 후에 나타나지 않습니다. Cookie가 생성 된 것을 볼 수 있으며, 페이지를 2 번째로 새로 고침하면 모든 것이 의도 한대로 작동합니다.

그래서 헤더가 예상대로 전송되지 않는다는 것을 알고 있습니까? 그러나 Symfony2에서이 작업을 수행하는 적절한 방법을 알 수는 없습니다. 당신은 그 문제가 이것을 시도의 생성 된 응답을 사용하지 않는

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpFoundation\Cookie; 

class navController extends Controller { 

    public function displayNavAction() { 


     $userState = ''; 
     $userZipcode = ''; 

     if ($this->container->get('security.context')->getToken() != null) { 
      // To check if user is authenticated or anonymous 
      if ($this->container->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY') === true) { 
       $user = $this->getUser(); 
       $userCity = $user->getCity(); 
       $userState = $user->getState(); 
       $userZipcode = $user->getZipcode(); 
      } else { 
       //User is not logged in, so check for cookie. 

       $request = $this->get('request'); 
       $cookies = $request->cookies; 

       if ($cookies->has('city')) 
       { 
        //User not logged in, but cookie exists. So use cookie. 
        $userCity = $cookies->get('city'); 

       } else { 
        //User not logged in, and no existing cookie. So create cookie. 
        $cookieGuest = array(
         'name' => 'city', 
         'value' => 'seattle', 
         'path' => '/', 
         'time' => time() + 3600 * 24 * 7, 
         false, 
         false 
         ); 

        $cookie = new Cookie($cookieGuest['name'], $cookieGuest['value'], $cookieGuest['time'], $cookieGuest['path']); 
        $response = new Response(); 
        $response->headers->setCookie($cookie); 
        $response->sendHeaders(); 

        $userCity = $cookies->get('city'); 
       } 


      } 
     } 


     return $this->render(
      'trrsywxBundle:Default:nav.html.twig', array('city' => $userCity, 'state' => $userState, 'zipcode' => $userZipcode, 'tempjunk' => $userCity)); 


    } 
} 

답변

0

: 여기

내 컨트롤러 코드

다음 요청을 사용하여 나뭇 가지에 쿠키 값을 얻을 수 있습니다
$userCity = $cookies->get('city'); 
    $response = new Response($this->render(
     'trrsywxBundle:Default:nav.html.twig',array(
       'city' => $userCity, 
       'state' => $userState, 
       'zipcode' => $userZipcode, 
       'tempjunk' => $userCity 
    ))); 

$cookie = new Cookie($cookieGuest['name'], $cookieGuest['value'],$cookieGuest['time'], $cookieGuest['path']); 
$response->headers->setCookie($cookie); 
$response->sendHeaders(); 


return $response; 

글로벌 {% app.request.cookies %}