Я создал сервис Factory в Symfony2 ( нажмите здесь для получения дополнительной информации об этом )
Затем я добавил службу в конфигурацию YAML следующим образом:
services:
#crypto services manager
cs_manager:
class: MyMC\Encrypt\Manager
factory_class: MyMC\Encrypt\Manager
factory_method: getInstance
arguments:
- %cs_application_cert%
- %cs_service_cert%
- %cs_cert_password%
#identity management system manager
ims_manager:
class: MyMC\Ims\Manager
factory_class: MyMC\Ims\Manager
factory_method: getInstance
arguments:
- %ims_service_domain%
- @cs_manager
Вы видите, что я передаю 2 аргумента в ims_manager.В функции getInstance () фабрики ims_manager я проверяю, чтобы убедиться, что эти два аргумента были переданы в ...
public static function getInstance($apiUrl = null, $cryptoService = null) {
if(!isset(self::$service)) {
$className = __CLASS__;
if($apiUrl == null) {
throw new Exception('getInstance','API url must not be null. Initiate with correct parameters on first call.');
}
if($cryptoService) {
throw new Exception('getInstance', 'You must pass a valid Encryption object on first call.');
}
self::$service = new $className($apiUrl);
}
return self::$service;
}
Но он выдает там свое собственное исключение, говоря, что я должен передать варгументы, что означает, что они не передаются Symfony при вызове функции. Может кто-нибудь придумать причину, по которой Symfony не передаст аргументы, которые я указал в файле конфигурации?
Кроме того, вот мое обратное следствие для последних 10 вызовов:
at Manager::getInstance()
at call_user_func() in /var/www/app/cache/dev/appDevDebugProjectContainer.php line 734
at appDevDebugProjectContainer->getImsManagerService() in /var/www/app/bootstrap.php.cache line 190
at Container->get() in /var/www/app/cache/dev/appDevDebugProjectContainer.php line 217
at appDevDebugProjectContainer->getEntityManagerService() in /var/www/app/bootstrap.php.cache line 190
at Container->get() in /var/www/app/cache/dev/appDevDebugProjectContainer.php line 857
at appDevDebugProjectContainer->getMcSecurityProviderService() in /var/www/app/bootstrap.php.cache line 190
at Container->get() in /var/www/app/cache/dev/appDevDebugProjectContainer.php line 1929
at appDevDebugProjectContainer->getSecurity_Authentication_ManagerService() in /var/www/app/bootstrap.php.cache line 190