Jak sdílet model mezi dvěma a více namespace?

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

Ahoj, řešim problém s namespace a nemůžu najít něco co by mi pomohlo…
Píšu si web s administrací a mám to rozdělené na Front modul a Admin modul. Používám tedy namespace FrontModule a AdminModule.

Napsal jsem si model Posts, ve kterém mám metodu na výpis článků z databáze. Tomu jsem ale žádný namespace neudělil s doměním, že ho pak budu moct používat v obou namespace (Front pro výpis, Admin pro přidání, editaci, atd.). To jsem si ale naběhl, protože když si teď zavolám třídu Posts z FrontModule, aplikace ji nenajde, protože ji hledá v FrontModule\Post.

S Nette začínám a v těch namespaces mám docela hokej, tak bych byl rád, kdyby mi někdo objasnil jak na to, protože když modelu dám namespace FrontModule, tak front pojede v poho ale z AdminModule se k němu nedostanu, navíc přiřadit mu natvrdo Front nebo Admin mi přijde nepraktický a mít 2× stejnej model pro každej namespace je taky blbost.

Snad sem se v tom moc nezamotal a je to aspoň trochu srozumitelný :) S nette i programováním začínám, tak prosím mějte trpělivost ;)

Ot@s
Backer | 476
+
0
-

Jmenné prostory dokážou být oříšek :-) Zkus se inspirovat u existujících projektů, např. Venne-CMS či KdybyCMS (viz. Nette Addons). Můžeš si např. třídy rozdělit na 3 hromádky: AdminModule, FrontModule a Common (nebo třeba MyCMS). Namespace AdminModule používáš výhradně v adresáři s AdminModule, FrontModule v adresáři FrontModule. Jsou to tedy věci, které souvisí čistě s funkčností modulu. Co Common si dej vše, co je společné pro celý projekt (tj. např. model Post, resp. Common/Model/Post nebo komponentu Paginator, resp. Common/Components/Paginator). První level máš vyřešený. Další jsou jen na Tobě (vždy od obecného ke konkrétnímu).

PS: Na Tvůj probém existuje jednoduché, ale asi né moc košer řešení. Model Posts bez určení namespace prefixuj zpětným lomítkem, tj. new \Posts($dbcon)

Jan Tvrdík
Nette guru | 2595
+
0
-

@Robin: Pohybuješ se na hraně, za kterou dotazy vyhazuji do koše, zamykám a mažu, protože smyslem tohoto fóra není vysvětlovat lidem základy PHP.

Co se týče tvojí otázky – model by měl být nezávislý na presenterech, tedy i na jmenných prostorech FrontModule a AdminModule, které existují pouze kvůli nim. Umísti ho tedy např. do nového jmenného prostoru Model.

Robin
Člen | 5
+
0
-

Díky za odpověď, s tím lomítkem mě to mohlo napadnout :D Určitě se podívám na to rozdělení s Common. Zkoušel jsem dát model do samotného namespace Models. To mi ale bylo k ničemu, protože teď hledal tu třídu ve FrontModule\Models\Posts respektive AdminModule\Models\Posts, takže bych se použití toho lomítka stejně nevyhnul, akorát bych musel psát new \Models\Posts.

22
Člen | 1478
+
0
-

nauč se používat use

Robin
Člen | 5
+
0
-

Tak už je mi to jasný :) Díky moc.