Проверьте, зарегистрирован ли пользователь в symfony - PullRequest
1 голос
/ 17 февраля 2011

Я использую 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 Ответ

2 голосов
/ 17 февраля 2011

Прежде всего, я не думаю, что в этом коде что-то не так,

<?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()

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

...