Kompletní přepsání velkého projektu do Nette
- Pitrrs
- Člen | 6
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
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
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
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
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:-)