我正在使用symfony 1.4.8和Propel作为ORM。要创建登录系统,我使用的是sfGuardPlugin。我已经配置了所有内容,登录系统正在运行。但是我在获取sfGuard用户数据(例如sfGuardUser id)方面存在问题,并且在登录时我遇到了后退按钮问题;当我登录并按下后退按钮时,它再次显示登录页面。
以下是我在视图中使用的代码,用于检查用户是否已登录:
<?php if($sf_user->isAuthenticated()): ?>
<?php echo link_to('Logout', '/logout') ?>
<?php else: ?>
<?php echo link_to('Login', '/login') ?>
<?php endif; ?>
如果我使用此方法获取sfGuardUser id:
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)
答案 0 :(得分:2)
首先,我不认为这段代码有问题,
<?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>
我认为浏览器后退按钮对于Web开发人员来说是一个痛苦的事情,所以如果这就是你对“后退按钮”的说法,那就完全不鼓励了。尝试在用户登录登录页面时重定向用户,或使用插槽呈现欢迎消息/登录表单,这样您就可以确保他/她始终能够看到应该使用的内容。此外,重定向将使服务器再次呈现所有内容,并确保会话信息完整。
关于获取用户ID的方法,它应该看起来像这样,让我们假设你正在采取行动:
$this->getUser()->getGuardUser()->getId()
那应该这样做。