我已经阅读了Extending ZfcUser's UserController in custom module,并按照它所写的做了所有事情,但是我仍然遇到了错误:
/vagrant/app/vendor/zf-commons/zfc-user/src/ZfcUser/Controller/UserController.php:69您必须提供一个可调用的redirectCallback
Stack trace:
#0 /vagrant/app/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php(207): ZfcUser\Controller\UserController->__construct()
#1 /vagrant/app/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(642): Zend\ServiceManager\AbstractPluginManager->createFromInvokable('zfcuser', 'zfcuser')
#2 /vagrant/app/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(598): Zend\ServiceManager\ServiceManager->doCreate('zfcuser', 'zfcuser')
#3 /vagrant/app/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(530): Zend\ServiceManager\ServiceManager->create(Array)
#4 /vagrant/app/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php(116): Zend\ServiceManager\ServiceManager->get('zfcuser', false)
#5 /vagrant/app/vendor/zendframework/zend-mvc/src/Controller/ControllerManager.php(137): Zend\ServiceManager\AbstractPluginManager->get('zfcuser', Array, false)
#6 /vagrant/app/vendor/zendframework/zend-mvc/src/Controller/Plugin/Forward.php(121): Zend\Mvc\Controller\ControllerManager->get('zfcuser')
#7 /vagrant/app/vendor/socalnick/scn-social-auth/src/ScnSocialAuth/Controller/UserController.php(118): Zend\Mvc\Controller\Plugin\Forward->dispatch('zfcuser', Array)
#8 /vagrant/app/vendor/zendframework/zend-mvc/src/Controller/AbstractActionController.php(82): ScnSocialAuth\Controller\UserController->loginAction()
#9 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))
#10 /vagrant/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(444): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#11 /vagrant/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(205): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#12 /vagrant/app/vendor/zendframework/zend-mvc/src/Controller/AbstractController.php(118): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#13 /vagrant/app/vendor/zendframework/zend-mvc/src/DispatchListener.php(93): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response))
#14 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
#15 /vagrant/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(444): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#16 /vagrant/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(205): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#17 /vagrant/app/vendor/zendframework/zend-mvc/src/Application.php(314): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#18 /vagrant/app/public/index.php(21): Zend\Mvc\Application->run()
#19 {main}在MyModule\Module.php中,我确实是这样做的:
public function getControllerConfig()
{
return array(
'factories' => array(
'User\Controller\User' => function($controllerManager) {
$serviceManager = $controllerManager->getServiceLocator();
$redirectCallback = $serviceManager->get('zfcuser_redirect_callback');
$controller = new \ZfcUser\Controller\UserController($redirectCallback);
return $controller;
},
),
);
}我的扩展用户控制器看起来如下:
class UserController extends \ZfcUser\Controller\UserController {
public function loginAction() {
// customs actions
}我还包括有自己的ScnSocialAuth模块的UserController。我为什么要那样做?我正在编写SPA应用程序(Backbone+Marionette),我需要模态验证。也许我漏掉了什么,或者是打错电话了-请帮我修好。我尝试了不同的方法,但这将是最理想的。此外,这个答案对其他用户也是有用的。谢谢。
发布于 2015-10-12 06:21:58
控制器有自己的配置:
public function getControllerConfig()
{
return [
'factories' => [
// snip您的错误消息是跟踪中的createFromInvokable。确保您没有具有相同定位器名称的可调用。
另外,您的工厂正在返回ZfcUser控制器,而不是自定义控制器。
发布于 2015-10-12 21:02:39
为了在ZfcUser中扩展Module.php控制器,必须:
public function getControllerConfig()
{
return array(
'factories' => array(
'User\Controller\User' => function($controllerManager) {
$serviceManager = $controllerManager->getServiceLocator();
$redirectCallback = $serviceManager->get('zfcuser_redirect_callback');
$controller = new \User\Controller\UserController($redirectCallback);
return $controller;
},
),
);
}并且需要调用自定义用户类而不是zfcuser。另外,我的错误是,在我的module.config.php中,它是:
'controllers' => array(
'invokables' => array(
'User\Controller\User' => 'User\Controller\UserController'
),
),正因为如此,我的工厂就不叫了。
https://stackoverflow.com/questions/33070783
复制相似问题