Я только что обновил один проект до 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.
Заранее спасибо.
В вашем случае
$serviceManager = $container;
, но не рекомендуется передавать весь servicemanager. Вместо этого внедряйте нужные вам объекты или услуги.