Проверьте, авторизован ли пользователь в symfony
Я использую Symfony 1.4.8 и Propel в качестве ORM. Для создания системы входа в систему я использую sfGuardPlugin. Я все настроил, и система входа в систему работает. Но у меня проблема с получением пользовательских данных sfGuard, таких как идентификатор sfGuardUser, и при входе в систему я получаю проблему с кнопкой возврата назад; Когда я вхожу в систему и нажимаю кнопку "Назад", она снова показывает страницу входа.
Вот код, который я использую в представлении, чтобы проверить, вошел ли пользователь в систему:
<?php if($sf_user->isAuthenticated()): ?>
<?php echo link_to('Logout', '/logout') ?>
<?php else: ?>
<?php echo link_to('Login', '/login') ?>
<?php endif; ?>
и если я использую этот метод, чтобы получить идентификатор sfGuardUser:
if($this->getUser())
{
$login_id=$this->getUser();
$c=new Criteria();
$c->add(SfGuardUserPeer::USERNAME,$login_id);
$sf_guard_user=SfGuardUserPeer::doSelectOne($c);
if($sf_guard_user)
{
$sf_id=$sf_guard_user->getId();
}
}
это дает мне ошибку:
(Неустранимая ошибка: уровень вложенности слишком глубокий - рекурсивная зависимость? В D:\development\sfprojects\proj\lib\vendor\symfony\lib\plugins\sfPropelPlugin\lib\vendor\propel\util\DebugPDOStatement.php в строке 124)
1 ответ
Во -первых, я не думаю, что в этом коде что-то не так,
<?php if($sf_user->isAuthenticated()): ?>
<?php echo link_to('Logout', '/logout') ?>
<?php else: ?>
<?php echo link_to('Login', '/login') ?>
<?php endif; ?>
Я обычно использую что-то вроде:
<div id="left_section">
<!-- This section is devoted to user context op -->
<?php if(!$sf_user->isAuthenticated()):?>
<div id="log_form">
<?php echo include_partial('user/login',array('form' => new sfGuardFormSignin()))?>
</div>
Dont have an account yet?
<?php echo link_to('Register now!','user/new')?>
<?php else:?>
<div id="user_info">
<?php echo include_partial('user/info')?>
</div>
<?php endif?>
</div>
Я думаю, что кнопка "Назад" в браузере - это неприятность для веб-разработчиков, поэтому, если это то, что вы говорите о "кнопке" Назад ", это совершенно не одобряет". Попробуйте перенаправить пользователя, когда он вошел на страницу входа, или используйте слот для отображения сообщения приветствия / формы входа в систему, чтобы вы всегда видели, что он / она видит. Кроме того, перенаправление заставит сервер снова отрендерить все и обеспечит полноту информации о сеансе.
Что касается метода получения идентификатора пользователя, он должен выглядеть примерно так, предположим, что вы находитесь в действии:
$this->getUser()->getGuardUser()->getId()
и это должно сделать это.