2014-03-07 46 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你是对的,我使用安全组件。但我真的很想理解这一点。我现在明白了。谢谢 –