下面的代码在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)
我不知道为什么第二行和第三行不同......有什么想法?
此致
哈维
答案 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)
如果以某种方式设法在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民众选择实现这一点。
我通过在登录屏幕上切换应用程序来测试这一点,允许会话死亡,手动终止会话并正常使用应用程序,到目前为止我还没有发现任何副作用。