I struggled with this myself for the last couple of days. The ZfcUser configuration includes a use_redirect_parameter_if_present
setting, but the documentation doesn't give any examples on how one might use this. I don't know if my method is solid, but here's what I did to get this working. Note that this method preserves the URL because it uses forward. I'm not sure of another way to do this without using forward.
In your zfcuser configuration file, go ahead and set that use_redirect_parameter_if_present
setting to true
. This causes ZfcUser's login action to look for a redirect
parameter in the request. It uses this to return the user to the specified location after successful authentication.
Then, in the controller where I want to ensure the user is logged in, I have:
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'
));
}
I hope that helps. If you have issues getting this working, you may need to post some code.