1

我在控制器中有一个函数,它需要检查用户是否已登录(我正在使用 zfcuser 模块),如果没有,则向他们显示登录屏幕。

我的理解是我应该运行这个:

return $this->forward()->dispatch('zfcuser', array('action' => 'authenticate'));

不幸的是,这改变了网址。我想显示登录屏幕并允许用户在不更改 url 的情况下登录。通过扩展,这意味着我还希望将用户重定向回同一页面,而不是转到该/user页面。

我怎样才能实现这两个目标?

4

1 回答 1

5

在过去的几天里,我自己也在为此苦苦挣扎。ZfcUser 配置包含一个use_redirect_parameter_if_present设置,但文档没有提供任何关于如何使用它的示例。我不知道我的方法是否可靠,但这就是我为使其正常工作所做的工作。请注意,此方法保留 URL,因为它使用转发。我不确定不使用 forward 的另一种方法。

在您的 zfcuser 配置文件中,继续将该use_redirect_parameter_if_present设置设置为true. 这会导致 ZfcUser 的登录操作redirect在请求中查找参数。它使用它在成功验证后将用户返回到指定位置。

然后,在我要确保用户登录的控制器中,我有:

if (!$this->zfcUserAuthentication()->hasIdentity()) {

    // Build the redirect URL using the route to which we want
    // the user returned.
    $redirect = $this->url()->fromRoute('your route', array(
        'optional-route-param' => 1234
    ));

    // Set the redirect URL in the request so that ZfcUser can
    // pick it up. This is the key.
    $this->getRequest()->getQuery()->set('redirect', $redirect);

    // Use ZfcUser's login action rather than its authentication
    // action.
    return $this->forward()->dispatch('zfcuser', array(
        'action' => 'login'
    ));
}

我希望这会有所帮助。如果您在使其正常工作时遇到问题,您可能需要发布一些代码。

于 2012-12-25T20:21:18.290 回答