Как внедрить диспетчер служб в файл модели в Zend Framework 3

#php #zend-framework2 #zend-framework3 #zend-servicemanager

Вопрос:

Я только что обновил один проект до Zend Framework 3 с версии ZF 1.x.

В версии ZF 1.x мы реализовали такую функциональность, как предоставление уникального идентификатора для запроса, выполняемого в приложении, с использованием компонента реестра Zend, которого нет в ZF 3. Я пытаюсь достичь этой функциональности с помощью ServiceManager.

Поэтому я попытался внедрить ServiceManager в файл модели, создав заводской класс, как показано ниже:

Мой код файла класса модели:

 <?php

namespace ApplicationModelCommon;

use ApplicationModelCommonConfigBaseConfig;
use ZendSessionContainer;
use ZendServiceManagerServiceManager;

class CommonUtils  extends BaseConfig{    

    public function __construct(ServiceManager $sm) {
        echo '<pre>';
        print_r($sm);
        exit();
    }

}

?>
 

Код Заводского класса:

 namespace ApplicationModelCommon;

use ZendServiceManagerFactoryFactoryInterface;
use InteropContainerContainerInterface;

class CommonUtilsFactory implements FactoryInterface{
    //put your code here
    public function __invoke(ContainerInterface $container, $requestedName, mixed $options = null) {
        $serviceManager = $container->get('ServiceManager');
        return new CommonUtils($serviceManager);
    }
}
 

Обновлено module.config.php файл, как показано ниже:

     /** SERVICE MANAGER CONFIGURATION - STARTS HERE **/
    'service_manager' => [
        'factories' => [
            CommonUtils::class => ApplicationModelCommonCommonUtilsFactory::class
        ],

        // Make an alias so that we can use it where we need
        'aliases' => [
        ],
    ],
    /** SERVICE MANAGER CONFIGURATION - ENDS HERE **/

 

Но это НЕ работает и выдает ошибку ниже.

Уловимая фатальная ошибка: Аргумент 1, переданный приложениюModelCommonCommonUtils::__construct (), должен быть экземпляром ZendServiceManagerServiceManager, не указан

Кто — нибудь, пожалуйста, помогите мне здесь понять, как получить доступ/ внедрить ServiceManager в файл модели в Zend Framework 3.

заранее спасибо.

Комментарии:

1. В вашем случае, $serviceManager = $container; но не рекомендуется передавать весь servicemanager целиком. Вместо этого введите нужные вам объекты или службы.