2016-01-23 5 views
0

У меня есть проблемы, решая catchable ошибку:ZF2 служба завода не впрыскивается

Catchable fatal error: Argument 1 passed to Market\Service\UserService::__construct() must be an instance of Market\Mapper\UserMapperInterface,

В конструкторе моей UserService я использую UserMapperInterface (инъекции зависимостей). Я создал фабричный класс для этого, и я зарегистрировал его в моей конфигурации service_manager. Ничего не происходит, и отображается ошибка.

Я создал завод и услуги 19287319827 раз, но теперь я не знаю, как я могу решить эту смертельную ошибку noob.

Config:

'service_manager' => array(
    'factories' => array(
     'Market\Service\UserServiceInterface' => 'Market\Factory\UserServiceFactory', 
    ) 
), 

Услуги:

class UserService implements UserServiceInterface 
{ 
    /** 
    * @var object Market\Mapper\UserMappperInteface 
    */ 
    protected $userMapper; 

/** 
* UserService constructor. 
* 
* @param UserMapperInterface $userMapperInterface 
*/ 
public function __construct(UserMapperInterface $userMapperInterface) 
{ 
    $this->userMapper = $userMapperInterface; 
} 

Фабрика:

use Zend\ServiceManager\FactoryInterface; 
use Zend\ServiceManager\ServiceLocatorInterface; 
use Market\Service\UserService; 

    class UserServiceFactory implements FactoryInterface 
    { 
     /** 
     * Create service 
     * 
     * @param ServiceLocatorInterface $serviceLocator 
     * @return mixed 
     */ 
     public function createService(ServiceLocatorInterface $serviceLocator) 
     { 
      $userMapperInteface = $serviceLocator->get('Market\Mapper\UserMapperInterface'); 

      return new UserService($userMapperInteface); 
     } 
    } 

Я не могу поверить, что я не могу решить эта смертельная ошибка noob. Я ищу и просматриваю последние 2 часа в своем коде, и я все проверял, и я думаю, что все выглядит хорошо, но класс не вводится на моем заводе.

+0

Измените конструктор UserService, чтобы ожидать, что объект с разнесенным именем. '__construct (Market \ Mapper \ UserMapperInterface $ userMapperInterface)' –

+0

, вероятно, проблема пространства имен. Возможно, вам не хватает предложения 'use' в вашем классе' UserEsrvice' – marcosh

+0

. У меня есть использование, PhpStorm автоматически добавляет, если его пропустить! – Ivan

ответ

0

Ваша проблема заключается в этой строке:

$userMapperInteface = $serviceLocator->get('Market\Mapper\UserMapperInterface'); 

Это, вероятно, возвращает null или, по крайней мере, что-то еще тогда ожидаемый UserMapperInterface экземпляра. Поскольку вы не делились каким-либо кодом о том, как и где этот Market\Mapper\UserMapperInterface определен или трудно сконфигурирован, трудно сказать, что именно идет не так ...

Просьба поделиться более подробной информацией об этой части, если вы не можете понять это самостоятельно.

+0

Я исправляю это, спасибо за ответ. – Ivan

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