На основании этого поста: ZfcUser Перенаправить на мою страницу после регистрации
Проблема с перенаправлением после регистрации. Возвращение объекта \ zend \ Http \ Response из события ‘register.post’ не перенаправляет
Я пытаюсь перенаправить недавно зарегистрированного пользователя на пользовательский маршрут безуспешно.
В настоящее время я использую свой собственный MemberListner, как описано здесь:
zfcuser добавить роль пользователя после регистрации
Это позволяет мне успешно использовать триггер события «register.post» для записи дополнительной информации.
Я также использовал это, чтобы добавить новые поля формы регистрации и фильтры с их собственными соответствующими функциями
$this->listeners[] = $sharedManager->attach('ZfcUser\Service\User', 'register', array($this, 'onRegister'));
$this->listeners[] = $sharedManager->attach('ZfcUser\Service\User', 'register.post', array($this, 'onRegisterPost'));
// SCN Social Auth did not register the link. Need to add here too.
$this->listeners[] = $sharedManager->attach('ScnSocialAuth\Authentication\Adapter\HybridAuth', 'registerViaProvider.post', array($this,'onSocialRegisterPost'));
// Currently run within the module due to lack of service manager on authentication
$this->listeners[] = $sharedManager->attach('ZfcUser\Authentication\Adapter\AdapterChain', 'authenticate.success', array($this, 'onAuthenticateSuccess'));
Мне удалось найти способ перенаправления при успешном входе в систему. Это написано в Module.php в onBootStrap () из-за моего отсутствия менеджера сервисов (отсутствие понимания, как его обойти).
$zfcAuthEvents = $serviceManager->get('ZfcUser\Authentication\Adapter\AdapterChain')->getEventManager();
$zfcAuthEvents->attach('authenticate.success', function($authEvent) use ($serviceManager) {
В этой функции обратного вызова есть блок
if ($member->getStatus() != 'COMPLETE') {
// we are going to re-set service,
// we need to set allow_override of serviceManager= true
$serviceManager->setAllowOverride(true);
$zfcuserModuleOptions = $serviceManager->get('zfcuser_module_options');
$zfcuserModuleOptions->setLoginRedirectRoute('member-register',array('action'=>'<My-Custom-Action>'));
$serviceManager->setService('zfcuser_module_options', $zfcuserModuleOptions);
// set 'allow_override' back to false
$serviceManager->setAllowOverride(false);
}
Поэтому: при входе в систему это прекрасно работает, и я могу отфильтровать то, что мне нужно, и перенаправить соответственно.
Однако при регистрации я никуда не могу попасть, кроме страницы по умолчанию / пользователя со ссылкой Gravatar и выходом из системы. (Это также перезаписывается в моем файле module.config.php в / account /, а не в / user /)
Я заметил, что в ZfCUser после регистрации происходит отправка:
ZfcUser / Controller / UserController.php вокруг строки 235 выполняет
$request->setPost(new Parameters($post));
return $this->forward()->dispatch(static::CONTROLLER_NAME, array('action' => 'authenticate'));
Это похоже на аутентификацию после регистрации, и поэтому я предполагаю, что событие «authenticate.success» инициировано (как описано выше), но это не так.
Мое «предположение» заключается в том, чтобы $ redirect = $ this-> redirectCallback; в /ZfcUser/Controller/UserController.php -> authenticateAction () [~ строка 169]
Обратите внимание:
Использование Bjyauthorise для управления ролями, вход в ScnSocial для Facebook.
Любые указатели или решения, которые сработали, приветствуются.
Задача ещё не решена.
Других решений пока нет …