Kompletní přepsání velkého projektu do Nette

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

Zdravím Vás,

už nějakou dobu se snažím učit Nette, který jsem si vybral mezi těma všema FW, které svět Open Source nabízí. Velice se mi líbí práce s komponenty a Ajaxem.

Ovšem k dotazu:
Mám velký projekt, který je z hist. důvodů psaný velmi zastarale (celý jen funkce, pouze jediný objekt ($user) atd) a co je hlavní – Je modulární, řeší se zde licence, přístup k určitým částím na základě licence, měsíční platby za pronájmy modulů atd atd atd…

Takže potřeboval bych nakopnout trošku správným směrem, jak navrhnout tuto aplikaci do Nette a kompletní modulárnosti (snadné přidávání modulů a podobně).

Za každou odpověď velké díky!

David Zadražil
Člen | 62
+
0
-

Určitě se koukni na Kdyby rozšíření od Filipa Procházky. Doporučil bych ti z toho použít jednak rozšíření pro Doctrine 2, ale i super věcičku jako je Kdyby\Events – to ti pomůže navázat na události určité akce. A nevím co přesně si představit pod modulama :)

Editoval David Zadražil (6. 5. 2014 12:37)

Pitrrs
Člen | 6
+
0
-

Děkuji za reakci.

Tedy pro upřesnění:

Mám v DB strukturu :

users (hlavni je user_id)
modules (module_id, system_name, description)
installed_modules (id, user_id, module_id, installed_to)

Ted budu používat velkými písmeny SYSTEM_NAME → to je právě ten název modulu z DB.

Souborová struktura je jednoduchá – pokud má uživatel nainstalován modul (tabulka installed_modules), naincluduje se soubor $root/modules/SYSTEM_NAME.php, který má 3 funkce:

module_SYSTEM_NAME_page($params) – pro vykreslení obsahu (správa modulu) v backendu
module_SYSTEM_NAME_widget($params) – pro vykreslení widgetu v dashboardu v backendu
module_SYSTEM_NAME_public($params) – pro veřejnou část – tzn. například objednávkový formulář na základě nastavení

Tyto funkce se na základě práv spouštějí v dané části (HOOKu), kde je potřeba.

Dále pak se v backendu generuje menu z právě těch nainstalovaných modulů.
V backendu je také část pro instalace/prodloužení platnosti modulu (výpis všech modulů s možností instalace)

To je tak nějak hodně zjednodušeně popsáno, jakou funkci bych potřeboval do Nette.

Tomáš Votruba
Moderator | 1114
+
0
-

1. Vlastní moduly je vhodné přidávat pomocí DI rozšíření do config.neon

extensions:
    - MyModule\DI\Extension

Pro ukázku implementace se můžeš kouknout na můj Zenify/UserModule – modul pro správu uživatelů

2. Dalším tipem je použití providerů, které umožňují předávání závislostí mezi moduly.
Ve zmíněném Kdyby\Doctrine např. IEntityProvider, který je odchytán v rozšíření – ten se stará o přidání tříd entit.

3. Začít psát.

Jiří Nápravník
Člen | 710
+
0
-

Na moduly taky doporučuji mrknout na Flame\Modules Pokdu potřebuješ, aby nějaký modul přidával routy, helpery apod. tak je to ideální.

Jinak přeju penvé nervy, před asi 14 dny jsem přepsal jeden docela velký projekt na Nette a byl to skoro porod:-)

Šaman
Člen | 2666
+
0
-

Trochu offtopic, tak bez dalšího rozmazávání – čemu říkáš světoví velikáni mezi PHP frameworky?

pkristian
Člen | 29
+
0
-

nojo, mrož je nastřčen od fymfonie :D :))

ontopic: já teď taky přepisuju projekt do nette… přeji též hodně štěstí