Расширение пользовательского контроля ZfcUser в пользовательском модуле

В моем настраиваемом модуле у меня есть пользовательский UserController который расширяет ZfcUser поставщика ZfcUser , чтобы настроить indexAction и registerAction .

 namesapce MyModule; class UserController extends ZfcUser\Controller\UserController { public function indexAction() { /* my code */ } public function registerAction() { /* my code */ } } 

Я добавляю следующее в модуле моего модуля module.config.php :

 // some more config 'controllers' => array( 'invokables' => array( 'MyModule\Controller\User' => 'MyModule\Controller\UserController', ), ), 'router' => array( 'routes' => array( /** * Overriding zfcuser route * https://juriansluiman.nl/article/117/use-3rd-party-modules-in-zend-framework-2 */ 'zfcuser' => array( 'options' => array( // to override the slug // 'route' => '/profile', 'defaults' => array( 'controller' => 'MyModule\Controller\User', 'action' => 'index', ), ), 'child_routes' => array( 'register' => array( 'options' => array( 'defaults' => array( 'controller' => 'MyModule\Controller\User', 'action' => 'register', ), ), ), ), ), 

Это дает мне

Предупреждение: Отсутствует аргумент 1 для ZfcUser \ Controller \ UserController :: __ construct (), вызывается в C: \ xampp \ htdocs \ my-module \ vendor \ zendframework \ zend-servicemanager \ src \ AbstractPluginManager.php в строке 207 и определен в C : \ xampp \ htdocs \ my-module \ vendor \ zf-commons \ zfc-user \ src \ ZfcUser \ Controller \ UserController.php в строке 66

А также

InvalidArgumentException C: \ xampp \ htdocs \ my-module \ vendor \ zf-commons \ zfc-user \ src \ ZfcUser \ Controller \ UserController.php: 69 Сообщение: вы должны предоставить вызываемый redirectCallback

Пользовательский контроллер zfc имеет зависимость обратного вызова перенаправления в конструкторе . Это нужно вводить.

Чтобы зарегистрировать свой пользовательский контроллер, вам придется создать заводскую настройку и ввести эту зависимость:

 'controllers' => array( 'invokables' => array( ), 'factories' => array( 'MyModule\Controller\User' => function($controllerManager) { /* @var ControllerManager $controllerManager*/ $serviceManager = $controllerManager->getServiceLocator(); /* @var RedirectCallback $redirectCallback */ $redirectCallback = $serviceManager->get('zfcuser_redirect_callback'); /* @var UserController $controller */ $controller = new UserController($redirectCallback); return $controller; }, ) ) 

Вы также можете сохранить старое определение маршрута и используя одно и то же имя контроллера, только перезаписывая исходную фабрику zfcuser из module.php контроллера zfcUser module.php :

Вам просто нужно загрузить ваш модуль после модуля ZfcUser и добавить этот код в свой module.php :

 public function getControllerConfig() { return array( 'factories' => array( 'zfcuser' => function($controllerManager) { /* @var ControllerManager $controllerManager*/ $serviceManager = $controllerManager->getServiceLocator(); /* @var RedirectCallback $redirectCallback */ $redirectCallback = $serviceManager->get('zfcuser_redirect_callback'); /* @var \MyModule\Controller\UserController $controller */ $controller = new \MyModule\Controller\UserController ($redirectCallback); return $controller; }, ), ); }