重定向不在Symfony 2中工作

时间:2014-03-07 08:46:14

标签: php symfony

我创建了一个管理包。我正在使用自己的逻辑来检查用户是否已登录。但如果用户未登录则不会重定向。我每次尝试通过构造函数调用名为isLoggedIn()函数的索引操作时调试代码,但重定向部分在登录后无法正常工作。

我的控制器代码是

    <?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'));
    }
}

2 个答案:

答案 0 :(得分:1)

您还可以做一件事,而不是写header();

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

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

sendHeaders()Symfony\Component\HttpFoundation\Response;的方法。

答案 1 :(得分:0)

使用redirect()方法时,它会返回RedirectResponse的实例,并在操作方法中使用。 (虽然构造函数方法中的重定向不是最佳实践),但此代码可以正常工作:

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

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

正如@Maerlyn所说,你必须使用安全组件。