formular submit problem s predavanym argumentem

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

Ahoj mam takovyto formularek:

<?php
use Nette\Forms\Container;
use Nette\Application\UI\Form;

class FakturyFormFactory
{
    public function newForm($opt)
    {
        $datumVystaveniDefault = (isset($opt['datumVystaveniDefault']))?$opt['datumVystaveniDefault']:date('d.m. Y');
        $datumZdaneniDefault = (isset($opt['datumZdaneniDefault']))?$opt['datumZdaneniDefault']:date('d.m. Y');

        $mod_date = strtotime(date('Y-m-d')."+ 14 days");
        $nextDay = date("d.m. Y", $mod_date);

        $datumSplatnostiDefault = (isset($opt['datumSplatnostiDefault']))?$opt['datumSplatnostiDefault']:$nextDay;

        $presenter = $opt['presenter'];
        $_this = $this;

        $form = new MyForm;
        $xform = $form;

        $form->getElementPrototype()->novalidate("novalidate");

        $form->addGroup();

        $form->addText('cisloFaktury', 'Číslo faktury:')
                ->setRequired('Vyplňte prosím "Číslo faktury".')
                ->setDefaultValue($opt['defaultFaNumber']);

        $form->addSelect('dodavatel', 'Dodavatel:', $presenter->keyValPairDodavatele())
                ->setRequired('Zvolte prosím "Dodavatele".')
                ->setAttribute('class', 'chsn_noSearch');

        $form->addSelect('odberatel', 'Odběratel:',
                        $presenter->KlientiRepository->seznamKlientu()
                        ->fetchPairs('id', 'nazevFirmy'))
                ->setRequired('Zvolte prosím "Odběratele".')
                ->setAttribute('class', 'chsn_noSearch')
                ->setPrompt('Zvolte odběratele.');

        $form->addSelect('zpusobPlatby', 'Způsob platby:', Glb::$ZPUSOB_PLATBY)
                ->setRequired('Zvolte prosím "Způsob platby".')
                ->setAttribute('class', 'chsn_noSearch');

        $form->addText('datumVystaveni', 'Datum vystavení:')
                ->setRequired('Vyplňte prosím "Datum vystavení".')
                ->setDefaultValue($datumVystaveniDefault);

        $form->addText('datumZdaneni', 'Datum zdanění:')
                ->setRequired('Vyplňte prosím "Datum zdanění".')
                ->setDefaultValue($datumZdaneniDefault);

        $form->addText('datumSplatnosti', 'Datum splatnosti:')
                ->setRequired('Vyplňte prosím "Datum splatnosti".')
                ->setDefaultValue($datumSplatnostiDefault);

        $form->addSubmit('ulozit', 'Uložit')
                ->setAttribute('class', 'btn btn-small btn-success')
                ->onClick[] = callback($_this, 'newFormSubmitted');

        $form->addSubmit('storno', 'Storno')
                ->setAttribute('class', 'btn btn-small')
                ->setValidationScope(NULL)
                ->onClick[] = callback($_this, 'newFormSubmitted');

        // $form->addSubmit('zpet', 'Zpět')
        //         ->setAttribute('class', 'btn btn-small btn-inverse')
        //         ->setValidationScope(NULL)
        //         ->onClick[] = callback($_this, 'newFormSubmitted');

        $form->setCurrentGroup(NULL);

        $invalidateCallback = function () use ($presenter) {
            /** @var \Nette\Application\UI\Presenter $presenter */
            $presenter->invalidateControl('usersForm');
        };

        // jméno, továrnička, výchozí počet
        $replicator = $form->addDynamic('polozky', function (Container $container) use ($invalidateCallback) {

            $container->currentGroup = $container->form->addGroup();

            $container->addText('popis', 'Položka:')
                    ->setRequired('Vyplňte prosím "Popis položky".')
                    ->setAttribute('placeholder', 'Popis položky');

            $container->addText('pocetKusu')
                    ->setRequired('Vyplňte prosím "Počet kusů".')
                    ->setAttribute('placeholder', 'Ks')
                    ->setAttribute('class', 'mL10 input-mini');

            $container->addText('cenaZaKus')
                    ->setRequired('Vyplňte prosím "Cenu za kus".')
                    ->setAttribute('placeholder', 'Cena za kus')
                    ->setAttribute('class', 'mL10 input-small');

            $container->addSubmit('smazatPolozku', 'Smazat')
                    ->setAttribute('class', 'btn btn-small btn-danger')
                    ->addRemoveOnClick($invalidateCallback);

        }, 1);


        /** @var \Kdyby\Replicator\Container $replicator */
        $replicator->addSubmit('add', 'Přidat položku')
                    ->setAttribute('class', 'btn btn-small btn-success')
                    ->addCreateOnClick($invalidateCallback);


        $form->addProtection('Vypršel časový limit, odešlete formulář znovu');

        return $form;
    }

    public function newFormSubmitted(MyForm $form)
    {
        $presenter = $form->getPresenter();

        $vals = $form->values;

        $id = (int) $presenter->getParam('id');

        if($form['storno']->isSubmittedBy())
        {
            if($id>0)
            {
                $presenter->redirect('edit', $id);
            }else
            {
                $presenter->redirect('new');
            }
        }

        if($form['zpet']->isSubmittedBy())
        {
            $presenter->restoreRequest($presenter->backlink);
        }

        if($form['ulozit']->isSubmittedBy())
        {
            $fData = array('nazevFirmy'=>$vals->nazevFirmy,
                            'ic'=>$vals->ic);

            if($id>0)
            {
                // $fData['id'] = $id;
                // $exists = $presenter->MenusRepository->existsExceptId($fData);
            }else
            {
                $exists = $presenter->KlientiRepository->exists($fData);
            }

            if(!$exists)
            {
                if($id>0)
                {
                    // $fData = array('id'=>$id,
                    //                 'sqlData'=>array('nazev'=>$nazev));
                    // $presenter->MenusRepository->update($fData);

                    // $presenter->flashMessage('Menu bylo úspěšně upraveno.', 'info');

                    // $presenter->restoreRequest($presenter->backlink);
                }else
                {
                    $fData['adresa'] = $vals->adresa;
                    $fData['mesto'] = $vals->mesto;
                    $fData['psc'] = $vals->psc;
                    $fData['idStatu'] = $vals->stat;
                    $fData['ic'] = $vals->ic;
                    $fData['dic'] = $vals->dic;

                    $fData = array('sqlData'=>$fData);
                    $r = $presenter->KlientiRepository->addKlienta($fData);

                    $presenter->flashMessage('Klient byl úspěšně uložen.', 'info');

                    $presenter->redirect('edit', $r['idKlienta']);
                }
            }else
            {
                $presenter->flashMessage('Nemůžete přidat existujícího klienta (Název firmy, IČ).', 'error');

                if($id>0)
                {
                    $presenter->redirect('edit', $id);
                }else
                {
                    $presenter->redirect('new');
                }
            }
        }

        $presenter->redirect('default');
    }
}

kdyz kliknu na STORNO nebo SUBMIT tak se mi provede chyba

Recoverable Error
Argument 1 passed to FakturyFormFactory::newFormSubmitted() must be an instance of MyForm, instance of Nette\Forms\Controls\SubmitButton given

jiri.pudil
Nette Blogger | 1032
+
0
-

Do onClick[] callbacku se nepředává formulář, ale tlačítko, kterým byl odeslán.