RobotLoader – Seznam nalezených souborů
- Pan Dobrman
- Člen | 45
Dobrý den, je možné získat seznam nalezených souborů z RobotLoaderu? Našel jsem toto, ale nefunguje.
$this->getContext()->getService("robotLoader"); //Service 'robotLoader' not found.
- Aurielle
- Člen | 1281
RobotLoader se už docela dlouho nepředává do DI kontejneru. Jestli k němu chceš přistupovat, musíš si pomoct nějak jinak – předat ho manuálně, nebo ho manuálně zaregistrovat jako službu. (S ani jedním z těchto řešení nemám zkušenost, takže ti možná radím hlouposti. Ještě si to zkus někým nechat ověřit.)
- Pan Dobrman
- Člen | 45
Snažím se získat názvy všech presenterů a první způsob, který mě napadl bylo použít RobotLoader. Nevíte o nějakém jiném způsobu, kterým by toho bylo možné dosáhnout?
- Felix
- Nette Core | 1245
gmvasek napsal(a):
RobotLoader se už docela dlouho nepředává do DI kontejneru. Jestli k němu chceš přistupovat, musíš si pomoct nějak jinak – předat ho manuálně, nebo ho manuálně zaregistrovat jako službu. (S ani jedním z těchto řešení nemám zkušenost, takže ti možná radím hlouposti. Ještě si to zkus někým nechat ověřit.)
Jinak to nejde.
// Enable RobotLoader - this will load all classes automatically
$configurator->setTempDirectory(__DIR__ . '/../temp');
$loader = $configurator->createRobotLoader()
->addDirectory(APP_DIR)
->addDirectory(LIBS_DIR)
->register();
// Create Dependency Injection container from config.neon file
$configurator->addConfig(__DIR__ . '/config/config.neon');
$container = $configurator->createContainer();
$container->addService('robotLoader', $loader);
Napriklad.
- Pan Dobrman
- Člen | 45
Děkuji. Ještě mě napadlo, zda by bylo možné získat (například pomocí reflexe) potomky Nette\Application\UI\Presenter. Byl by to rychlejší způsob, než parsovat celou cache RobotLoaderu.
- Filip Procházka
- Moderator | 4668
Až na to, že všechny třídy by musely být includovany do běžící aplikace a to je víc než nežádoucí. Proto je vhodnější použít cache robota.
- Pan Dobrman
- Člen | 45
Tak jsem si napsal kus kódu, který získá všechny třídy končící na „Presenter“. Napadlo mě, zda by bylo možné vytvořit novou instanci RobotLoaderu jen pro složku appDir, čímž by odpadla nutnost upravovat boostrap, předávání RobotLoaderu ze service (třída, která to bude využívat nemá přístup ke context) a odtranění tříd NetteModule\MicroPresenter, nebo Nette\Application\UI\Presenter z výsledků.
- Felix
- Nette Core | 1245
Pan Dobrman napsal(a):
Tak jsem si napsal kus kódu, který získá všechny třídy končící na „Presenter“. Napadlo mě, zda by bylo možné vytvořit novou instanci RobotLoaderu jen pro složku appDir, čímž by odpadla nutnost upravovat boostrap, předávání RobotLoaderu ze service (třída, která to bude využívat nemá přístup ke context) a odtranění tříd NetteModule\MicroPresenter, nebo Nette\Application\UI\Presenter z výsledků.
V cem je problem filtrovat tyhle veci z cache robotLoaderu? Od toho tu je, aby se s nim pracovalo.