2014-03-07 70 views
0

我創建了一個管理包。我使用自己的邏輯來檢查用戶是否登錄。但是,如果用戶沒有登錄,則不會重定向。每當索引操作調用isLoggedIn()函數時通過構造函數調用但重定向部分登錄不起作用。重定向不在Symfony 2中工作

我controoler代碼

<?php 

    namespace Nitin\AdminBundle\Controller; 

    use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
    use Symfony\Component\HttpFoundation\Request; 
    use Bitcoin\AdminBundle\BitcoinAdminBundle; 
    use Symfony\Component\HttpFoundation\Response; 
    use Symfony\Component\HttpFoundation\RedirectResponse; 

    class AdminController extends Controller { 

    public $session; 
    public $container; 
    public $pageData; 

    public function __construct() { 
     $this->container = NitinAdminBundle::getContainer(); 
     $this->session = $this->container->get('session'); 
     $this->isLoggedIn(); 
    } 

    public function indexAction(Request $request) { //die(''.__LINE__); 
     return $this->render('NitinAdminBundle:Default:index.html.twig'); 
    } 

    public function isLoggedIn() { 
     $isLoggedin = $this->session->get('loggedIn', FALSE); 

     if (FALSE === $isLoggedin) { 
      return $this->redirect($this->generateUrl('nitin_admin_login')); 
     } 
     return false; 
    } 

    public function logoutAction() { 
     $this->session->invalidate(); 
     return $this->redirect($this->generateUrl('nitin_admin_login')); 
    } 
} 
+0

你爲什麼要用__constructor? –

+4

我知道複雜性一開始是可怕的,但是真的值得使用symfony的安全組件。 – Maerlyn

+0

@Maerlyn你是對的。我將使用安全組件。 但也想確定爲什麼發生這個問題。 –

回答

1

一件事是Symfony\Component\HttpFoundation\Response;的方法。

0

當您使用redirect()方法,它返回的RedirectResponse一個實例,它是在操作方法使用。 (雖然,重定向的構造方法是不是最好的做法)這個代碼可以工作:

protected function isLoggedIn() 
{ 
    $isLoggedin = $this->session->get('loggedIn', false); 

    if (false === $isLoggedin) { 
     header('Location: ' . $this->generateUrl('nitin_admin_login')); 
     exit; 
    } 
} 

至於說通過@Maerlyn,您必須使用安全組件。你可以做的,而不是寫header();

public function isLoggedIn() { 
     $isLoggedin = $this->session->get('loggedIn', FALSE); 

     if (FALSE === $isLoggedin) { 
      $this->redirect($this->generateUrl('nitin_admin_login'))->sendHeaders(); 
     } 
     return false; 
    } 

sendHeaders()

+0

謝謝@aykut你是對的,我使用安全組件。但我真的很想理解這一點。我現在明白了。謝謝 –