Symfony:关于sfDoctrineGuardPlugin的一段代码的问题

时间:2010-05-24 17:01:47

标签: symfony1

下面的代码在sfDoctrineGuardPlugin中。

$a = sfConfig::get('app_sf_guard_plugin_success_signin_url');

var_dump($a);

$signinUrl = sfConfig::get('app_sf_guard_plugin_success_signin_url', $user->getReferer($request->getReferer()));

var_dump($signinUrl);

var_dump($user->getReferer($request->getReferer()));

打印出来:

  

     

的字符串   'http://rs3.localhost/frontend_dev.php/'   (长度= 38)

     

的字符串   'http://rs3.localhost/frontend_dev.php/miembros'(长度= 46)

我不知道为什么第二行和第三行不同......有什么想法?

此致

哈维

3 个答案:

答案 0 :(得分:0)

怪异。幽灵般的。

我想知道对getReferer()的两次调用是否在不同的情况下?也许第一个(作为sfConfig::get()的第二个arg)隐含地使用__toString(),而当你使用var_dump()时,它可能正在打印引用对象的原始值吗?

Hrmm ...... API说getReferer()返回一个字符串,所以可能不是它。

你想做什么,BTW?它是否不尊重app_sf_guard_plugin_success_signin_url的{​​{1}}设置?

答案 1 :(得分:0)

sfDoctrineGuardPlugin在用户中设置referer属性,以便它可以重定向回最初请求的页面。当您致电getReferer时,它会删除该属性。 (这给我带来了错误,这就是把我带到这里的原因。)

答案 2 :(得分:0)

yitznewton向我指出了一个解决方案。 sfGuardSecurityUser类使用方法setReferer来保存referer属性,但只有在尚未设置的情况下才会保存。

如果以某种方式设法在sfGuard操作中获取executeSignin方法两次,则仅保存第一个referer属性,这意味着第二次请求中的referer和user属性中的referer可能不同。< / p>

getReferer方法删除该属性,并在未设置属性时回退到请求引用。这解释了为什么两次调用$ user-&gt; getReferer($ request-&gt; getReferer())会返回不同的值。

我发现的解决方案是覆盖myUser类中sfGuardSecurityUser的setReferer方法:

public function setReferer($referer) {
    $this->setAttribute('referer', $referer);
}

到目前为止,我还没有发现任何副作用,这种变化确保用户属性总是最新的,但是必须有理由解释为什么symfony民众选择实现这一点。

我通过在登录屏幕上切换应用程序来测试这一点,允许会话死亡,手动终止会话并正常使用应用程序,到目前为止我还没有发现任何副作用。