2016-12-24 2 views
0

У меня есть следующие в моем модуле приложения конфигурации:ZF2 новый контроллер модуль решает недопустимого класса контроллера или псевдоним при использовании фабрики

'controllers' => [ 
     'factories' => [ 
      Application\Controller\IndexController::class => Application\Controller\IndexControllerFactory::class 
     ], 
    ], 

это работает отлично. теперь им мой serve module у меня почти такой же:

'controllers' => array(
        /** 
        'invokables' => array(
          'Serve\Controller\Index' => 'Serve\Controller\IndexController', 
        ), 
        */ 

        'factories' => array(
          Controller\IndexController::class => Serve\Controller\IndexControllerFactory::class 
        ) 

      ), 

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

Serve\Controller\Index (resolves to invalid controller class or alias: Serve\Controller\Index)

как я сказал им доступ к контроллеру подачи через API, так что может быть проблемой установки при запросе через систему как API.

Что интересно, когда я делаю это работает:

'controllers'=>array(
    'invokables' => array(
        'Serve\Controller\Index' => 'Serve\Controller\IndexController', 
      )), 

не уверен, что случилось здесь

UPDATE:

Это похоже на работу:

'factories' => array(
        'Serve\Controller\Index' => IndexControllerFactory::class 
      )  

однако идентификатор как использовать ::class синтаксис

ответ

0

Проблема заключается в конфигурации вашего маршрута при сопоставлении с контроллером: Serve\Controller\Index, но вы либо никогда не регистрировали этот контроллер с этим конкретным ключом в своем module.config, либо используете неправильное значение для ключа «controller» на вашем маршруте поскольку вы указали FQCN в своем сопоставлении с контроллером.

// module.config 
'aliases' => [ 
    'Serve\Controller\Index' => Serve\Controller\IndexController:class, 
], 
'factories' => [ 
    Serve\Controller\IndexController:class => Serve\Controller\IndexControllerFactory::class, 
], 

или внутри маршрута конфиги не используйте Serve\Controller\Index, но использовать FQCN, так что она использует завод непосредственно вместо псевдонима вы создали. Как:

// route.config 
'serve' => [ 
    'type' => 'literal', 
    'options' => [ 
     'route' => '/serve', 
     'defaults' => [ 
      'controller' => Serve\Controller\IndexController::class, 
      'action'  => 'index', 
     ], 
    ], 
], 

Я держу отображение моих классов в отображении на заводе с FQCN и добавить псевдонимы, если я хочу, чтобы называть их по-другому. Таким образом, теперь вы можете использовать FQCN или любые его псевдонимы, например: Serve\Controller\Index

Смежные вопросы