У меня есть функции setAttribute ($ key, $ value) и getAttribute ($ key, $ default) в моем классе User. Когда пользователь аутентифицирован, я хочу установить несколько атрибутов, которые будут использоваться позже в разных контроллерах.Symfony2 изменить глобальную ссылку пользователя?
Я попытался установить атрибуты в моей функции обработчика успеха:
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
$token->getUser()->setAttribute("user_data_set", 1);
}
Но когда я попытался назвать его в своем контроллере значение не установлено
public function indexAction(Request $request) {
//Get the logged in user
$user = $this->getUser();
//Entity Manager
$em = $this->getDoctrine()->getManager();
// this page is just used as the starting point to redirect the user to the appropriate page
if($user->getAttribute("user_data_set", 0) == 1)
{
//Get Symfony1 route from the user data table
$old_homepage = $user->getAttribute("user_homepage", "@default_homepage");
//Convert route to Symfony2 format
$new_homepage = $this->setForwardingAddress($old_homepage);
return $this->redirect($this->generateUrl($new_homepage));
}
else
{
return $this->redirect('login');
}
}
Как я могу изменить глобальный вместо локальной ссылки?
Если вы не хотите сохранять его в БД, почему вы не используете сеанс для хранения атрибутов? – lsouza
@lsouza Я имею дело с большим количеством устаревшего кода. Я обновляю наш сайт с Symfony 1.4 до 2.5. Унаследованный код имеет встроенные функции getAttribute/setAttribute в классе User. Унаследованный код имеет расширенный пользовательский класс, который устанавливает атрибуты пользователя и обрабатывает запросы к базе данных. Я попытался подражать этому, создав репозиторий пользователей. Было бы плохой идеей установить переменные сеанса из репозитория? –
Вместо репозитория вы можете создать службу UserManager и решить все, что вам нужно, от сеанса jandling до пользовательских операций. Репозиторий очень полезен, но должен иметь дело только с базой данных. – lsouza