Form komponenta setDefaults odkial by mala spravne zobrat data

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

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 ;)