Přidání metody k Form\Controls\
- thm
- Člen | 147
Zdravím, nevím jak se mám zeptat, ale vysvětlím to konkrétně.
Chtěl bych u formulářového prvku volat svoji funkci (pro uložení a
načtení hodnoty z cookies/session).
Např.:
$form->addCheckbox('remember', 'Přihlásit trvale')->loadState()->afterSubmitSaveState();
Představuju si to tak, že loadState() načte, pokud existuje, proměnnou
buď z cookie, nebo session a vyplní ji do prvku,
afterSubmitSaveState() vyplněnou hodnotu uloží do cookie nebo session.
Jak bych měl postupovat?
Díky za tipy.
Editoval thm (5. 6. 2014 9:46)
- mirimCZ
- Člen | 24
No asi by jsi musel předělat metodu addCheckbox() aby místo klasické třídy elementu z nette přidávala tvou vlastní třídu, která by dědila z původní třídy a navíc měla požadované metody. Další možností by bylo ukládat celý formulář a hodnoty nastavovat přes setDefaultValues(). Druhé řešení co jsem nabídl mi připadá lepší, ale stejně se mi to trochu smrdí špatným návrhem :)
Otázkou je, čeho se snažíš docílit? Proč chceš formuláře ukládat do session nebo cookies?
- thm
- Člen | 147
No asi by jsi musel předělat metodu addCheckbox() aby místo klasické třídy elementu z nette přidávala tvou vlastní třídu, která by dědila z původní třídy a navíc měla požadované metody.
Toto se mi právě dělat nechce, navíc bych to třeba chtěl ke každému prvku. (addText, addTextarea …)
Další možností by bylo ukládat celý formulář a hodnoty nastavovat přes setDefaultValues().
Jasný, ale nejde mi o celý formulář. To by ale problém nebyl, mohl bych v továrně na formulář dodávat konkrétním prvkům pomocí setValue().
Otázkou je, čeho se snažíš docílit? Proč chceš formuláře ukládat do session nebo cookies?
Například, pokud mám nějakého „průvodce“ (třeba tři kroky plnění formulářů), kde po vyplnění jednoho a odeslání se uživatel dostane k dalšímu, a tak dále, a na konci se stane něco ošklivého (výpadek, celková kontrola neproběhne správně) a uživatel je nucen vše vyplňovat znova, tak se mi na to vybodne, když to nebude mít předvyplěné tím co tam psal předtím.
Nebo například pro předvyplnění uživatelského jména, nebo tak něčeho…
- mirimCZ
- Člen | 24
Tak pokud jde o krokování formulářů, tak předpokládám, že každý krok má vlastní formulář > tím pádem by bylo vhodné ukládat celý formulář. Pokud řešíš nějaký „repopulating“ nebo ochranu proti ztrátě při nějakém průseru, lepší by bylo použít SAYT (https://github.com/…-as-you-type).
Předvyplňovat uživatelské jméno – v jaké situaci? Při přihlašování toto obstarávají prohlížeče, takže bych se tím nezabýval. Pokud o takovou funkčnost má uživatel zájem, využije možností prohlížeče.
Obecně – pokud narazím na něco co se mi „nechce dělat“, tak takové řešení zavrhnu, protože to značí, že se snažím něco používat tak, jak to nebylo zamýšlené a neplatí to pouze pro nette, které je obecně napsané velmi chytře. Proto spíš než radění k Tvému dotazu teď zjišťuju, co vlastně děláš a jestli by to nešlo udělat jinak :) zatím jsem toho názoru, že by jiný přístup byl lepší :)
Editoval mirimCZ (5. 6. 2014 13:34)
- mirimCZ
- Člen | 24
Jinak ještě z jiného úhlu – pro mě osobně jsou formuláře „frontendovou/renderovací“ komponentou. Z pravidla v nich neřeším žádnou datovou logiku (načítání/ukládání dat z/do úložiště) – z toho titulu si myslím, že učit inputy nebo formulář ukládat se „někam“ (ať už je to session nebo cookies nebo databáze, nebo jiné úložiště) je špatný návrh :) (asi bych to klasifikoval jako porušení SRP? (https://en.wikipedia.org/…ty_principle) )
Editoval mirimCZ (5. 6. 2014 13:42)