Jak zpřístupnit nette prostředí z venčí (z jiné aplikace)
- lvq
- Člen | 47
Mám nette aplikaci. Používám doctrine. Jsem v situaci, kdy potřebuji
mít přístup k aplikaci „zvenčí“.
Praktický příklad: mám napsány entity a fasády k přístupu do db.
V nette aplikaci s nimi běžně pracuji, ale potřebuji tyto entity a fasády
využívat i vně aplikace.
Jde zavolat něco takového:
$container = require __DIR__ . '/../../../nette/app/bootstrap.php';
$container->getByType(Nette\Application\Application::class)
->run();
$mojeFasada = $container->nejakSeTadyObjevMojeFasado();
$mojeFasada->vratMiVsechnyClanky();
Jen nevím, jestli je vůbec v současném nette s DI něco takového
vůbec možné.
Případně prosím o radu, jak se s tímto problémem nějak jinak
vypořádat než, jak to zamýšlím.
Díky
- Tharos
- Člen | 1030
Možné to je a za mě jdeš správným směrem.
Jen bych se vykašlal na volání Application::run
. To slouží
jen k odbavení requestu. Skutečným srdcem aplikace není
Application
, nýbrž zinicializovaný DI kontejner. Takže stačí
require
bootstrapu, který kontejner správně zinicializuje, a pak
už si z něj můžeš vytáhnout libovolnou z těch fasád atp.
Já podobně postupuji v některých akceptačních testech.
- Tharos
- Člen | 1030
Zdá se že to funguje.
Tak super. :)
Fasádu si pojmenuji v
neon
u, abych ji potom našel.
Buďto si ji pojmenuj, anebo ji z kontejneru vytáhni podle typu:
$mojeFasada = $container->getByType(MyFacade::class); // lze samozřejmě použít interface
Získávání podle typu je takové elegantnější, zejména pak v kombinaci s rozhraními.
Editoval Tharos (3. 10. 2016 9:36)