2014-10-27 7 views
1

У меня есть страница входа, которая при входе в систему возвращает приветственную страницу с именем пользователя на ней. Я использую этот код, чтобы передать переменную $ пользователю страницы приветствия:Как передать переменные с одной страницы на другую в Symfony2

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 на странице менеджера. Как правильно передать его между страницами?

EDIT: Я editedy код, но теперь я получаю эту ошибку:

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

ответ

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> 
+0

я редактировал О.П., спасибо за ваш ответ –

+0

я получаю эту ошибку, когда я пытаюсь свой ответ: Импосс ible для доступа к атрибуту («имя пользователя») в переменной NULL («») в LoginLoginBundle: по умолчанию: welcome.html.twig в строке 10 –

Смежные вопросы