Я использую Slim 4.5.0 с PHP-DI 6, и у меня проблема с циклической зависимостью.
Я знаю, как решить эту проблему с помощью сеттера, но в контексте SlimFramework я не могу заставить ничего работать.
Я хочу отправить сообщение в Slack Channel при возникновении ошибки.
LoggerInterface::class => function (ContainerInterface $c):Logger
{
return new Logger($c->get(SlackService::class), $c->get("googleLogger"), (string)$c->get("RCQVersion"), $c->get('settings')['appSettings']['deploymentType'], $c->get('settings')['online']);
},
SecretManagerService::class => function (ContainerInterface $c):SecretManagerService
{
return new SecretManagerService($c->get('settings'), $c->get(LoggerInterface::class));
},
SlackService::class =>function(ContainerInterface $c):SlackService
{
$slackToken = $c->get(SecretManagerService::class)->getSecret(SecretManagerService::$SLACK_TOKEN);
return new SlackService($slackToken, (string)$c->get("RCQVersion"), $c->get('settings')['appSettings']['deploymentType'], $c->get('settings')['online']);
},
Мне нужно предоставить SlackService моему пользовательскому Logger.
Я пытался использовать ключевое слово @Inject в моем классе Logger, чтобы установить Slack Service (и удалить его из конструктора):
/**
* @Inject
* @var SlackService $slackService
*/
private $slackService;
Или используйте функцию установки и @Inject (с именем класса и без него)
/**
* @Inject("RedCrossQuest\Service\SlackService")
* @param SlackService $slackService
*/
public function setSlackService(SlackService $slackService)
{
$this->slackService = $slackService;
}
Но это не работает, хотя я чувствую, что это правильный путь.
Я уже использую @Inject для установки свойства в моем классе (строковое значение), и это работает хорошо, но здесь по некоторым причинам это не так.
Я не нашел здесь ничего, что могло бы помочь понять, почему это не сработает. https://php-di.org/doc/annotations.html
Каждый раз, когда возникает ошибка, я получаю сообщение об ошибке, говорящее, что slackService равен нулю Uncaught Error: Call to a member function postMessage() on null
Чего мне не хватает, чтобы заставить @Inject() работать?
googlelogger
? Я не знаю, чего мне не хватает, но я не вижу циклической зависимости. - person Nima   schedule 12.08.2020SecretManager
настраиваемым классом, который вы написали? Как и зачем он использует регистратор? Это конкретно нужноSlackService
? - person Nima   schedule 13.08.2020