我有一个登录页面,登录后会返回一个欢迎页面,上面有用户名。 我使用此代码将变量$ 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
答案 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>