如何在Symfony2中将变量从一个页面传递到另一个页面

时间:2014-10-27 20:26:16

标签: php symfony variables

我有一个登录页面,登录后会返回一个欢迎页面,上面有用户名。 我使用此代码将变量$ user传递给欢迎页面:

return $this->render('LoginLoginBundle:Default:welcome.html.twig', array('user' => $user));

现在在欢迎页面上,我有一个导航栏,上面有manager.html.twig的链接。

这是欢迎页面上链接的代码:

<li><a href="{{path('login_login_managerPage')}}">Manager</a></li>

链接转到此路线:

login_login_managerPage:
path:   /managerPage
defaults: { _controller: LoginLoginBundle:Default:manager }

指向managerAction:

public function managerAction(Request $request) {
    $session = $this->getRequest()->getSession();
    $em = $this->getDoctrine()->getEntityManager();
    $repository = $em->getRepository('LoginLoginBundle:User');
    if ($session->has('login')) {
        $login = $session->get('login');
        $username = $login->getUsername();
        $password = $login->getPassword();
        $user = $repository->findOneBy(array('username' => $username, 'password' => $password));
        if ($user) {
            return $this->render('LoginLoginBundle:Default:manager.html.twig', array('user' => $user));
        }
    }
    return $this->render('LoginLoginBundle:Default:login.html.twig');
}

现在我无法获得$ user到managerpage。如何在页面之间正确传递?

编辑: 我编辑了代码,但现在我收到了这个错误:

Impossible to access an attribute ("username") on a NULL variable ("") in LoginLoginBundle:Default:welcome.html.twig at line 10 

1 个答案:

答案 0 :(得分:3)

我建议您使用Symfony自己的安全组件,而不是编写自己的安全系统,该组件已经完成了所有重要的事情。请仔细阅读以下链接:http://symfony.com/doc/current/book/security.html

从这里http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form开始,它展示了如何从数据库中获取用户。 如果您使用symfony的安全组件,那么您将能够获得当前登录用户,如下所示:

public function indexAction()
{
    $user = $this->get('security.context')->getToken()->getUser();
}

在控制器中,这可以是:

的快捷方式
public function indexAction()
{
    $user = $this->getUser();
}

如果你使用树枝,最后在模板中:

<p>Username: {{ app.user.username }}</p>