Jak vytáhnout parametr z Configuratoru ještě před vytvořením containeru?
- chikeet
- Člen | 160
Ahoj,
dá se nějak vytáhnout parametr z Configuratoru a předat službě, kterou do
něj následně podmíněně přidávám?
Konkrétně řeším odesílání mailů z CLI s generováním odkazů
v mailech (podle tohoto
návodu) a ráda bych měla předávané url pohodlně konfigurovatelné v
config.local.neon
.
V bootstrapu mám:
$configurator->addConfig(__DIR__ . '/config/config.neon');
$configurator->addConfig(__DIR__ . '/config/config.local.neon');
if(PHP_SAPI === 'cli'){
// takhle nějak by se mi to líbilo:
// $domainUrl = $configurator->getParameter('domainUrl');
// takhle to zatím mám:
$domainUrl = 'http://example.com/';
$configurator->addServices([
'http.request' => new Nette\Http\Request(new Nette\Http\UrlScript($domainUrl)),
]);
}
$container = $configurator->createContainer();
Dá se to nějak hezky vyřešit?
- Martk
- Člen | 651
Tak jak to chceš ty, tak to nepůjde, bez velké úpravy kódu. Konfigurační soubor se parsuje, až s voláním metody createContainer. Metoda addConfig uloží jen cestu k souboru do pole.
Jestli chceš mít dostupný parameter i v aplikaci, tak uděláš tohle:
$configurator->addConfig(__DIR__ . '/config/config.neon');
$configurator->addConfig(__DIR__ . '/config/config.local.neon');
$configurator->addParameters([
'domainUrl' => PHP_SAPI === 'cli' ? 'xxx' : NULL,
]);
$container = $configurator->createContainer();
V config.local.neon definuješ normálně službu, nový parameter by měl být pod %domainUrl%
- chikeet
- Člen | 160
Martk napsal(a):
Tak jak to chceš ty, tak to nepůjde, bez velké úpravy kódu. Konfigurační soubor se parsuje, až s voláním metody createContainer. Metoda addConfig uloží jen cestu k souboru do pole.
Jestli chceš mít dostupný parameter i v aplikaci, tak uděláš tohle:
$configurator->addConfig(__DIR__ . '/config/config.neon'); $configurator->addConfig(__DIR__ . '/config/config.local.neon'); $configurator->addParameters([ 'domainUrl' => PHP_SAPI === 'cli' ? 'xxx' : NULL, ]); $container = $configurator->createContainer();
V config.local.neon definuješ normálně službu, nový parameter by měl být pod %domainUrl%
Sice chci něco trošičku jiného (mít právě to domainUrl v configu), ale díky, nakoplo mě to správným směrem :-)
- filsedla
- Člen | 101
Zrovna dneska jsem do bootstrapu napsal tohle:
...
$container = $configurator->createContainer();
if ($container->parameters['consoleMode']) {
$container->removeService('httpRequest');
$container->addService('httpRequest', new \Nette\Http\Request(
new \Nette\Http\UrlScript($container->parameters['substituteRequestUrl'])));
}
- matopeto
- Člen | 395
filsedla napsal(a):
Zrovna dneska jsem do bootstrapu napsal tohle:
... $container = $configurator->createContainer(); if ($container->parameters['consoleMode']) { $container->removeService('httpRequest'); $container->addService('httpRequest', new \Nette\Http\Request( new \Nette\Http\UrlScript($container->parameters['substituteRequestUrl']))); }
Hm… remove service by ma nenapadlo, nedavno som to potreboval… skusim :)
- Felix
- Nette Core | 1183
filsedla napsal(a):
Zrovna dneska jsem do bootstrapu napsal tohle:
... $container = $configurator->createContainer(); if ($container->parameters['consoleMode']) { $container->removeService('httpRequest'); $container->addService('httpRequest', new \Nette\Http\Request( new \Nette\Http\UrlScript($container->parameters['substituteRequestUrl']))); }
Ja na tohle pouzivam rozsireni a funguje paradne.
https://github.com/…master/.docs#sapi
extensions:
sapi: Contributte\Http\SAPI\DI\SapiRequestExtension(https://my-ultra-top.web)