Я немного изо всех сил пытался понять, как я могу использовать Container
, который дает мне доступ к параметрам, расположенным в config/parameters.yml
.
Проблема в моих руках, я создал некоторые пользовательскиеExceptions
и я создал библиотеку, которая ослабляет меня каждый раз, когда срабатывает одно из этих исключений.Для этого мне нужно отправить container
в Logger, чтобы иметь возможность протащить их в библиотеку.
Но я не могу ухватиться за container
.У меня есть идея, что ее нужно вводить и что я могу достичь этого в config/services.yml
, но я не понимаю, как.
Пока что это то, чего я достиг:
Мой родительский объект пользовательских исключений
Поскольку все исключения исходят из родительского, все они вызовут Logger
.И в этот момент мне нужно, чтобы container
существовал:
abstract class CriticalLogAlertException extends \RuntimeException
{
protected $logger;
public function __construct ($message = "", $code = 0, Throwable $previous = NULL)
{
parent::__construct($message, $code, $previous);
Log::critical(
$this->message,
[],
AbstractCredentialsFactory::YAML_TYPE,
'PARAMETERS CONTAINER ACCESS NEEDS TO BE ADDED HERE'
);
}
abstract public function generateMessage($message) : string;
}
То, что я думал о создании для этого класса метода setContainer()
, который я мог бы использовать в своем config/services.yml
:
public function setContainer(ContainerInterface $container)
{
$this->container - $container;
}
Итак, на данный момент я могу создать property
в абстрактном классе и использовать его для передачи его в library
, как это было бы уже доступно в class execution
.Хотя я не уверен, что это достижимо или правильно ;
My config / services.yml
Ниже приведенокод, который я добавил в свой контейнер услуг:
ExceptionContainer:
class: AppBundle\Exception\CriticalLogAlertException
calls:
- [ setContainer,[ @service_container ] ]
Может ли кто-нибудь помочь мне понять, если я что-то упускаю или неправильно понимаю, чтобы сделать его доступным?
ПРИМЕЧАНИЕ: Если что-то еще нужно, чтобы лучше понять мою проблему, пожалуйста, дайте мне знать, чтобы я мог обновить свой вопрос:)
Заранее спасибо!