RobotLoader – Seznam nalezených souborů

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Pan Dobrman
Člen | 45
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.

Jan Endel
Člen | 1016
+
0
-

Ještě se zeptám, na co potřebuješ seznam všech presenterů?

nanuqcz
Člen | 822
+
0
-

pilec: Tipnu si, třeba chce udělat nějaké automaticky generované menu. Ale příkladů využití si dokážu představit víc :-)

Pan Dobrman
Člen | 45
+
0
-

Ano, mělo by to být automaticky generované menu.