Komplexnější komponenta – jak na to?

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

Zdravím zdejší komunitu. Potřebuji komponentu, která bude, jak jinak, znovupoužitelná. Principem to bude takový CRUD nad tabulkami. Potíž je v tom, že tato komponenta bude nabízet podle kontextu (třeba podle podle práv) různé formuláře nad stejnými tabulkami. Např. admin uvidí kompletní administrační formulář, ale redaktor jen formulář o 5-ti položkách. Vůbec nevím jak na to. Může mi prosím někdo zkušenější naznačit, jak na to? Ideálně si představuju nějaký základ (base-object) komponenty CRUDu. Z něj bych vytvářel konkrétní objekt pro správu jednotlivých tabulek (přes settery bych ho „konfiguroval“). Následně bych podle kontextu/práv odněkud „bral“ objekty formulářů. Snad jsem se do toho nezamotal. Díky za rady.

echo
Člen | 134
+
0
-

Zdravím,
lze to elegantně řešit kompozicí. Vytvoříš si třídu AdminFunctions dědící od Nette\Form\Container a v konstruktoru nastavíš prvky formuláře, ke kterým má přístup jen admin.

Dále si vytvoříš třídu reprezentující základní formulář s prvky dostupnými pro všechny. (\EditForm)

V presenteru podle role zjistíš, jestli je uživatel admin. Když ano, tak $editForm->addContainer(AdminFunctions).