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
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
Do onClick[] callbacku se nepředává formulář, ale tlačítko, kterým byl odeslán.