#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 целиком. Вместо этого введите нужные вам объекты или службы.