Проверьте, авторизован ли пользователь в 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()

и это должно сделать это.

Другие вопросы по тегам