Это похоже на то, что я хотел бы сделать, хотя вам нужно либо указать значение по умолчанию (в конфигурации вашего модуля), что невозможно в контексте ключей api, либо создать правильное исключение на вашем заводе, потому что вы Не хочу иметь undefined index service_name_api
через несколько месяцев :)
Некоторым людям также нравится иметь объект конфигурации и иметь фабрику только для этого объекта (она помогает с управлением значениями по умолчанию, а не сбой). Я лично считаю это слишком много, хотя, если ваш ключ не используется повторно во многих местах, и в этом случае вы бы продублировали заводские тесты.
Так вместо того, чтобы добавить следующее каждой фабрики, потребляющего его
if (!isset($config['service_name_api']) || !is_string($config['service_name_api'])) {
throw new \Exception('No "service_name_api" found in the configuration');
}
Вы могли бы иметь простой объект
final class ServiceNameApiOption
{
private $key;
public function __construct(string $apiKey)
{
$this->key = $apiKey;
}
public function getKey() : string
{
return $this->key;
}
}
, а затем завод только для этого:
final class ServiceNameApiOptionFactory
{
public function __invoke(ContainerInterface $container)
{
$config = $container->get('Config');
if (!isset($config['service_name_api']) || !is_string($config['service_name_api'])) {
throw new \Exception('No "service_name_api" found in the configuration');
}
return new ServiceNameApiOption($config['service_name_api']);
}
}