Которые не хотят работать вместе из коробки.
Все действия будут в контексте модуля Application из Skeleton.
В контроллере User модуля ScnSocialAuth, в действии register напрямую вызывается действие register модуля ZfcUser.
Как результат мы видим обычную форму регистрации со всеми полями,
несмотря на то, что все плагины подключены в нужной последовательности.
Все что мне нужно, чтобы вместо него вызывалось действие email-verification модуля CdliTwoStageSignup, которое отвечает за отрисовку формы первого этапа регистрации с проверкой почты.
1. Создаем свой контроллер, расширящий
\ScnSocialAuth\Controller\UserController
Application/src/Application/Controller/SocialAuthController.php
namespace Application\Controller; use Zend\View\Model\ViewModel; class SocialAuthController extends \ScnSocialAuth\Controller\UserController { public function registerAction() { // вызываем контроллер CdliTwoStageSignup $zfcUserRegister = $this->forward() ->dispatch('cdlitwostagesignup_ev_controller', array('action' => 'email-verification')); /*if (!$zfcUserRegister instanceof ModelInterface) { return $zfcUserRegister; }*/ $viewModel = new ViewModel(); $viewModel->addChild($zfcUserRegister, 'zfcUserLogin'); $viewModel->setVariable('options', $this->getOptions()); $redirect = false; if ($this->getServiceLocator()->get('zfcuser_module_options') ->getUseRedirectParameterIfPresent() && $this->getRequest()->getQuery()->get('redirect')) { $redirect = $this->getRequest()->getQuery()->get('redirect'); } $viewModel->setVariable('redirect', $redirect); // подключаем шаблон оригинального модуля $viewModel->setTemplate('scn-social-auth/user/register'); return $viewModel; } }2. Создаем фабрику контроллера для первоначальной инициализации
по аналогии с фабрикой из ScnSocialAuth
Application/src/Application/Service/SocialAuthControllerFactory.php
namespace Application\Service; use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; class SocialAuthControllerFactory implements FactoryInterface { public function createService( ServiceLocatorInterface $controllerManager) { $mapper = $controllerManager->getServiceLocator() ->get('ScnSocialAuth-UserProviderMapper'); $hybridAuth = $controllerManager->getServiceLocator() ->get('HybridAuth'); $moduleOptions = $controllerManager->getServiceLocator() ->get('ScnSocialAuth-ModuleOptions'); $controller = new \Application\Controller\SocialAuthController(); $controller->setMapper($mapper); $controller->setHybridAuth($hybridAuth); $controller->setOptions($moduleOptions); return $controller; } }3. Настройки в конфигурации нашего модуля
Application/config/module.config.php
... 'router' => array( 'routes' => array( ... // создаем роут на наш контроллер 'social-auth' => array( 'type' => 'Literal', 'priority' => 2000, 'options' => array( 'route' => '/user', 'defaults' => array( 'controller' => 'zfcuser', 'action' => 'index', ), ), 'may_terminate' => true, 'child_routes' => array( 'register' => array( 'type' => 'Literal', 'options' => array( 'route' => '/register', 'defaults' => array( 'controller' => 'Application\Controller\SocialAuth', 'action' => 'register', ), ), ), ), ), ), ), 'controllers' => array( ... // регистрируем фабрику контроллера 'factories' => array( 'Application\Controller\SocialAuth' => 'Application\Service\UserControllerFactory', ), ),
Комментариев нет:
Отправить комментарий