Poznámka k funkčnosti samostatných projektů (NDebugger a dibi) i obecně
- LeonardoCA
- Člen | 296
Souvisí s Jak rozdělit Nette do samostatných projektů
I když se problém samotný týkal hlavně dibi, myslím si, že podobné problémy mohou nastat i při osamostatňování jiných částí a proto píšu na fórum nette.
Reálná zakázka – napojit se na nějaké API, stáhnout data, zajistit aktualizaci, udělat vyhledávání nad daty. To vše pro existující projekt, který o Nette ani netuší.
Můj modul je samostatný, pracující se svou databázi, jediné propojení bude přes třídu poskytující hlavní aplikaci data. Dobrá, udělám si to po svém, bez laděnky nepracuji a jsem zvyklý na dibi.
- mám svůj jednoduchý konfigurák kde si inicializuji NDebugger a dibi
- pár svých tříd, pár úloh do cronu
- vše běží v pořádku
- data se stahují, chyby logují, ošetřují nebo opravují sporadické chyby způsobené výpadky na straně externího API
Zbývá poslední – poskytování dat hlavní aplikaci
- vytvořím třídu, dle specifikace
- použiji stále stejný svůj konfigurák, ale přidám flag, protože během přístupu z hlavní aplikace nechci používat laděnku pokud neladím, chyby si ošetřují sami a navíc bych zachytával jejich chyby o kterých nechci nic vědět
- ale chci používat dibi, takže dibi ponechám aktivní
- udělám testovací skript s příklady volání, kde vše otestuji, vše funguje
Napíšu – stačí vložit tento jediný soubor tam kde budete chtít používat tuto třídu a vše bude fungovat – a nefunguje
LogicException : Class Nette\Diagnostics\IBarPanel could not be loaded
WTF? Vždyť laděnku v tomto případě ani nevkládám?
No jo, ono tam mají někde v tom projektu autoloading.
- vyřešil jsem to přidáním druhého parametru $autoload = false do všech tří výskytů funkce interface_exists v dibi.min.php:
if (interface_exists('Nette\Diagnostics\IBarPanel', false)) {
K tomu mám teď otázky, na které zatím nevím správné odpovědi:
- Je potřeba použít funkci interface_exists s aktivním autoloadingem?
- Šlo by tento můj problém vyřešit nějak jinak bez zásahu do zdrojáku dibi?
- Obecně – měly s podobnými možnými problémy samostatné moduly počítat a mít takové situace ošetřené? Nebo alespoň možné problémy zmiňovat v dokumentaci?
- Myslím, že by se mi hodila i funkce NDebugger::disable() – že bych Debugger aktivoval jen uvnitř „svého“ modulu, případně jen pro nějaké kritické funkce, které si chci sám sledovat – ale pořádně jsem to nepromýšlel – nevím jestli je to reálné a jestli to není scestná úvaha