В моем настраиваемом модуле у меня есть пользовательский 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; }, ), ); }