Umístění komponent v modulární aplikace, nenalezení komponenty továrničkou

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

Ahoj,
pracuji na aplikaci, kterou mám dle doporučení rozdělenou na moduly Front a Admin. V nich jsou submoduly jednotlivých částí aplikace (statické stránky, shop, uživatelské rozhraní):

  • FrontModule
  • – UserModule
  • – ShopModule
  • AdminModule

Nyní potřebuji (ideálně pro každý ze dvou hlavních modulů) složku s komponentami. Vše funguje relativně korektně, avšak musím v továrničce psát lomítko před název komponenty, což se mi za prvé nelíbí a za druhé vidím, jak na to budu zapomínat.

$control = new \MyControl($this, $name);

jinak vyskočí hláška, že danou třídu nelze nalézt. Zkoušel jsem použít

use

, ale pořádně nevím na co by mělo směřovat.
Proč RobotLoader tedy nenajde komponentu a továrnička se k ní korektně bez lomítek a cest nedostane? Jsem sice v jiném namespace, to ale v jiných případech to nevadí. Je tedy možné mít všechny komponenty v jedné složce (třeba pro každý modul zvlášť, to je asi jedno) a volat jejich továrničky odkudkoliv bez lomítek a cest?
Díky z rady

Editoval Climber007 (15. 10. 2012 16:46)

mkoubik
Člen | 728
+
0
-
  1. Nastuduj si pořádně namespacy v PHP, tohle chování je naprosto standardní.
  2. Rozmístění tříd do složek s namespacy nijak nesouvisí (dodržují se jen určité konvence), robotloaderu je jedno kde danou třídu našel, pokud ji najde.
Climber007
Člen | 105
+
0
-

Než jsem přešel na tuhle strukturu, měl jsem tuto:

  • MyModule
  • – FrontModule
  • – AdminModule
  • components

V ní mi fungovaly továrničky i bez lomítek. To je divný…

Ot@s
Backer | 476
+
0
-

Climber007 napsal(a):

V ní mi fungovaly továrničky i bez lomítek. To je divný…

Divný to není. Všimni si začátků tříd, resp. kombinací použití:

  • namespace
  • namespace + use
  • use

To, co „funguje“ bez namespace určitě bude uvedeno v use.

Climber007
Člen | 105
+
0
-

Po prostudování namespaces musím trochu přeformulovat otázku. Jak docílit, aby byly komponenty defaultně načítání z „app/components“ a ne z „components“ v aktuálním modulu? Někde jsem viděl něco ve starém konfiguračním souboru, v neonu ale nic takového není.