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

avatar
Sreejith Pm
9 августа 2021 в 05:50
118
0
1

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

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

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

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

<?php

namespace Application\Model\Common;

use Application\Model\Common\Config\BaseConfig;
use Zend\Session\Container;
use \Zend\ServiceManager\ServiceManager;

class CommonUtils  extends BaseConfig{    

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

}

?>

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

namespace Application\Model\Common;

use Zend\ServiceManager\Factory\FactoryInterface;
use Interop\Container\ContainerInterface;

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 => \Application\Model\Common\CommonUtilsFactory::class
        ],

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

Но он НЕ работает и выдает следующую ошибку.

Перехватываемая фатальная ошибка: аргумент 1, переданный в Application\Model\Common\CommonUtils::__construct(), должен быть экземпляром Zend\ServiceManager\ServiceManager, не задано

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

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

Источник
Alain Pomirol
9 августа 2021 в 17:44
2

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

Ответы (0)