Zend\ServiceManager\Exception\ServiceNotCreatedException 尝试创建新路线时
Zend\ServiceManager\Exception\ServiceNotCreatedException when try to create a new route
我尝试在我的一个模块中创建一个新路由,以对应于我项目中的一个新控制器。
但是我收到了这个错误,我不知道它来自哪里:
While attempting to create shopmanagementcontrollershopmanagement(alias: Shopmanagement\Controller\Shopmanagement) an invalid factory was registered for this instance type.
我得到了这个 Stacktrace:
0 /var/www/routedudrive.fr/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(634):
Zend\ServiceManager\AbstractPluginManager->createFromFactory('shopmanagementc...',
'Shopmanagement\...')
1 /var/www/routedudrive.fr/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(597):
Zend\ServiceManager\ServiceManager->doCreate('Shopmanagement\...',
'shopmanagementc...')
2 /var/www/routedudrive.fr/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(530):
Zend\ServiceManager\ServiceManager->create(Array)
3 /var/www/routedudrive.fr/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php(161):
Zend\ServiceManager\ServiceManager->get('Shopmanagement\...', true)
4 /var/www/routedudrive.fr/vendor/zendframework/zend-mvc/src/DispatchListener.php(94):
Zend\ServiceManager\AbstractPluginManager->get('Shopmanagement\...')
5 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
6 /var/www/routedudrive.fr/vendor/zendframework/zend-eventmanager/src/EventManager.php(490):
call_user_func(Array, Object(Zend\Mvc\MvcEvent))
7 /var/www/routedudrive.fr/vendor/zendframework/zend-eventmanager/src/EventManager.php(263):
Zend\EventManager\EventManager->triggerListeners('dispatch',
Object(Zend\Mvc\MvcEvent), Object(Closure))
8 /var/www/routedudrive.fr/vendor/zendframework/zend-mvc/src/Application.php(340):
Zend\EventManager\EventManager->triggerEventUntil(Object(Closure),
Object(Zend\Mvc\MvcEvent))
9 /var/www/routedudrive.fr/public/index.php(21): Zend\Mvc\Application->run()
10 {main}
这是我的module.config.php:
<?php
return array(
'controllers' => array(
'factories' => array(
'Backshop\Controller\Backshop' => Backshop\ControllerFactory\BackshopControllerFactory::class,
'Shopmanagement\Controller\Shopmanagement' => Shopmanagement\ControllerFactory\ShopmanagementControllerFactory::class,
),
),
'router' => array(
'routes' => array(
'backshop' => array(
'type' => 'segment',
'options' => array(
'route' => '/backshop[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9a-zA-Z]+',
),
'defaults' => array(
'controller' => 'Backshop\Controller\Backshop',
'action' => 'index',
),
),
),
'shopmanagement' => array(
'type' => 'segment',
'options' => array(
'route' => '/shopmanagement[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9a-zA-Z]+',
),
'defaults' => array(
'controller' => 'Shopmanagement\Controller\Shopmanagement',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'backshop' => __DIR__ . '/../view',
'shopmanagement' => __DIR__ . '/../view',
),
),
);
这是我的 ShopmanagementControllerFactory.php :
<?php
namespace Shopmanagement\ControllerFactory;
use Shopmanagement\Controller\ShopmanagementController;
use \Zend\ServiceManager\FactoryInterface;
use \Zend\ServiceManager\ServiceLocatorInterface;
class ShopmanagementControllerFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator) {
$sm = $serviceLocator->getServiceLocator();
//$merchantTable = $sm->get('Backshop\Model\MerchantTable');
//$accountValidationTable = $sm->get('Backshop\Model\AccountValidationTable');
$controller = new ShopmanagementController();
return $controller;
}
}
这是我的 ShopmanagementController.php :
<?php
namespace Shopmanagement\Controller;
use Zend\View\Model\ViewModel;
class ShopmanagementController extends AbstractActionController{
public function __construct()
{
}
public function indexAction(){
return new ViewModel();
}
}
这是我的文件树:
如果您知道问题出在哪里,将不胜感激:)
提前谢谢你,
托马斯
我终于找到了可以帮助某人的解决方案。
我只是忘记像这样在我的 Module.php 文件中引用我的命名空间:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
'Shopmanagement' => __DIR__ . '/src/' . 'Shopmanagement', //This line
),
),
);
}
我尝试在我的一个模块中创建一个新路由,以对应于我项目中的一个新控制器。
但是我收到了这个错误,我不知道它来自哪里:
While attempting to create shopmanagementcontrollershopmanagement(alias: Shopmanagement\Controller\Shopmanagement) an invalid factory was registered for this instance type.
我得到了这个 Stacktrace:
0 /var/www/routedudrive.fr/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(634): Zend\ServiceManager\AbstractPluginManager->createFromFactory('shopmanagementc...', 'Shopmanagement\...')
1 /var/www/routedudrive.fr/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(597): Zend\ServiceManager\ServiceManager->doCreate('Shopmanagement\...', 'shopmanagementc...')
2 /var/www/routedudrive.fr/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(530): Zend\ServiceManager\ServiceManager->create(Array)
3 /var/www/routedudrive.fr/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php(161): Zend\ServiceManager\ServiceManager->get('Shopmanagement\...', true)
4 /var/www/routedudrive.fr/vendor/zendframework/zend-mvc/src/DispatchListener.php(94): Zend\ServiceManager\AbstractPluginManager->get('Shopmanagement\...')
5 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent)) 6 /var/www/routedudrive.fr/vendor/zendframework/zend-eventmanager/src/EventManager.php(490): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
7 /var/www/routedudrive.fr/vendor/zendframework/zend-eventmanager/src/EventManager.php(263): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
8 /var/www/routedudrive.fr/vendor/zendframework/zend-mvc/src/Application.php(340): Zend\EventManager\EventManager->triggerEventUntil(Object(Closure), Object(Zend\Mvc\MvcEvent))
9 /var/www/routedudrive.fr/public/index.php(21): Zend\Mvc\Application->run()
10 {main}
这是我的module.config.php:
<?php
return array(
'controllers' => array(
'factories' => array(
'Backshop\Controller\Backshop' => Backshop\ControllerFactory\BackshopControllerFactory::class,
'Shopmanagement\Controller\Shopmanagement' => Shopmanagement\ControllerFactory\ShopmanagementControllerFactory::class,
),
),
'router' => array(
'routes' => array(
'backshop' => array(
'type' => 'segment',
'options' => array(
'route' => '/backshop[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9a-zA-Z]+',
),
'defaults' => array(
'controller' => 'Backshop\Controller\Backshop',
'action' => 'index',
),
),
),
'shopmanagement' => array(
'type' => 'segment',
'options' => array(
'route' => '/shopmanagement[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9a-zA-Z]+',
),
'defaults' => array(
'controller' => 'Shopmanagement\Controller\Shopmanagement',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'backshop' => __DIR__ . '/../view',
'shopmanagement' => __DIR__ . '/../view',
),
),
);
这是我的 ShopmanagementControllerFactory.php :
<?php
namespace Shopmanagement\ControllerFactory;
use Shopmanagement\Controller\ShopmanagementController;
use \Zend\ServiceManager\FactoryInterface;
use \Zend\ServiceManager\ServiceLocatorInterface;
class ShopmanagementControllerFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator) {
$sm = $serviceLocator->getServiceLocator();
//$merchantTable = $sm->get('Backshop\Model\MerchantTable');
//$accountValidationTable = $sm->get('Backshop\Model\AccountValidationTable');
$controller = new ShopmanagementController();
return $controller;
}
}
这是我的 ShopmanagementController.php :
<?php
namespace Shopmanagement\Controller;
use Zend\View\Model\ViewModel;
class ShopmanagementController extends AbstractActionController{
public function __construct()
{
}
public function indexAction(){
return new ViewModel();
}
}
这是我的文件树:
如果您知道问题出在哪里,将不胜感激:)
提前谢谢你,
托马斯
我终于找到了可以帮助某人的解决方案。
我只是忘记像这样在我的 Module.php 文件中引用我的命名空间:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
'Shopmanagement' => __DIR__ . '/src/' . 'Shopmanagement', //This line
),
),
);
}