Form komponenta setDefaults odkial by mala spravne zobrat data
- boudel
- Člen | 5
Ahojte,
s Nette zacinam, miestami tapem, luskam dokumentaciu a prechadzam forum, a tak si potrebujem uzrejmit pojmy a praktiky…
Dajme tomu, ze mam formular urceny na filtrovanie zaznamov v DB, form bude zlozeny z nasledujucich poli:
protected function createComponentForm()
{
$form = new UI\Form;
$form->addText('from', 'Od');
$form->addText('to', 'Do');
$form->addSubmit('customRange', 'Vybrat');
$form->addSubmit('today', 'Dnes');
$form->addSubmit('last7days', 'Posledních 7 dní');
$form->addSubmit('currentMonth', 'Tento měsíc');
$form->onSuccess[] = [$this, 'processForm'];
$selectedRange = $this->userManager->getOrdersFilterSelectedRange($this->user->id);
if (!empty($selectedRange)) {
$form->setDefaults([
'from' => date('d.m.Y H:i', strtotime($selectedRange->date_from)),
'to' => date('d.m.Y H:i', strtotime($selectedRange->date_to))
]);
} else {
$form->setDefaults([
'from' => date('d.m.Y 00:00'),
'to' => date('d.m.Y 23:59')
]);
}
return $form;
}
Form budem pouzivat napriec celym projektom preto je obaleny v komponente (snazim sa vychadzat z best practise). Tiez chcem aby si „pamatal“ aky rozsah mal uzivatel vybrany vcera, preto po spracovani formularu data ulozim do DB tabulky users_setting.
- je v poriadku pri vytvarani komponenty nacitavat data z DB? Nebolo by lepsie predat tie data z presenteru do komponenty, pride mi, ze takto ma komponenta zbytocnu zavislost a to ma vedie k tomu, ze to nie je najcistejsie riesenie, radsej by som mal komponentu bez takejto zavislosti. Ako to riesite vy? Zatial som nikde nenasiel diskusiu alebo clanok v dokumentacii, ktory by popisoval tuto problematiku.
Kedze ma formular skratene volby na filtrovanie zaznamov, data z formularu po odoslani parsujem pre ulozenie do tabulky, tu uz dlhsie hladam aky je ten spravny pohlad na formulare z pohladu MVP a teda ci sa ma metoda na parsovanie nachadzat v komponente alebo v modely.
Zaroven po odoslani dat formularu a ich ulozeni, ich v presentery opat nacitam z DB a zavolam metodu na nacitanie dat z modelu, takze by som radsej predal data z komponenty do presenteru, no nie je mi celkom jasne ake by malo byt to spravne riesenie. Tu ale opat prichadza konflikt, po prihlaseni musim aj tak data nacitat z DB.
Takze v presentery mam zatial nieco nasledovne:
$ordersFilterSelectedRange = $this->userManager->getOrdersFilterSelectedRange($this->getUser()->id);
if (empty($ordersFilterSelectedRange)) {
$ordersFrom = date('Y-m-d 00:00:00');
$ordersTo = date('Y-m-d 23:59:59');
} else {
$ordersFrom = $ordersFilterSelectedRange->date_from;
$ordersTo = $ordersFilterSelectedRange->date_to;
}
$orders = $this->orderManager->getOrdersByDateTimeRange($ordersFrom, $ordersTo);
Co si o tom myslite, ako by ste to riesili? Ja by som cele parsovanie dat z formularu upravil tak aby bola metoda pouzitelna aj pre presenter a celu ju presunul do modelu, nacital data z DB do presenteru a odovzdal aj komponente, no zatial nie celkom rozumiem tomu ako spravne predavat data z presenteru do komponenty.
Dakujem ;)