2014-12-27 77 views
1

我有一個動作addFavorite女巫只有AUTHENTICATED用戶才能訪問。當用戶是匿名時,他將被重定向到登錄表單。所以我希望用戶在連接後重定向到這個動作。 現在他將被重定向到默認路徑登錄後重定向到之前的操作

security.yml

 main: 
     pattern: ^/ 
     anonymous: true 
     provider: main 
     form_login: 
      login_path: fos_user_security_login 
      check_path: fos_user_security_check 
      always_use_default_target_path: false 
      default_target_path:/
      target_path_parameter:   _target_path 
      use_referer:   true 
      csrf_provider: form.csrf_provider 
     logout: 
      path: fos_user_security_logout 
      target:/
     remember_me: 
      key: %secret%          

的ActionController:

public function addFavoriteAction(Travel $travel, Request $request) 
    { 

    if (!$this->get('security.context')->isGranted('IS_AUTHENTICATED_REMEMBERED')) { 
     return $this->redirect($this->generateUrl('fos_user_security_login')); 
    } 

    if ($request->getMethod() == 'GET') { 

    $em = $this->getDoctrine()->getManager(); 

    $user = $this->get('security.context')->getToken()->getUser(); 

    $nbFav = $em->getRepository('ProjectTravelBundle:Favorite')->findOneBy(array('user' =>$user, 'travel' =>$travel)); 

    if(!$nbFav) 
    { 
     $favorite = new Favorite();  
     $favorite->setUser($user); 
     $favorite->setTravel($travel); 

     $em->persist($favorite); 
     $em->flush(); 
    } 
    } 
    $referer = $this->getRequest()->headers->get('referer'); 
    return $this->redirect($referer); 
} 
+1

我無法理解你的代碼。但是你可以這樣做。當用戶訪問你的站點時,在發送他登錄頁面之前保存會話或數據庫的路徑。登錄後檢查你的會話或數據庫是否有他以前鏈接的值,然後將他重定向到該鏈接,否則重定向他默認控制器。 – 2014-12-27 13:59:24

+0

當您重定向到登錄頁面時,您可以添加一個通過GET方法傳遞的附加變量,登錄後您可以從變量中提取值並將用戶重定向回原始頁面 – 2014-12-27 14:05:31

回答

1

Symfony's documentation,用戶被自動重定向到他們的頁面試圖訪問。所以,如果他們在addFavorite路由已經沒有通過身份驗證,他們將登錄併發送回它。

您也可以手動設置形式:

<input type="hidden" name="_target_path" value="your_route_name_goes_here" />