Nefunguje více tlačítek ve formuláři
- ondra310
- Člen | 25
Vytvořil jsem komponentu s jednoduchým formulářem, ve formuláři jsou
tři odesílací tlačítka u klasického Buttonu nelze použít metodu
onClick[] proto jsem použil tlačítka Submit. Pokud pracuji s komponentou
formulář se odesílá a vše funguje, jakmile se vrátím na presenter kde je
komponenta hlásí mi nette tuto chybu:
Argument 1 passed to Nette\Utils\Arrays::get() must be an array, null
given, called in \!www\libs\Nette\Forms\Controls\BaseControl.php on line
344 and defined
pokud je ve formuláři pouze jedno odesílací tlačítko vše je OK
nevíte prosím kde může být chyba.
Komponenta:
<?php
use Nette\Application\UI\Control;
use Nette\Application\UI\Form;
class FiltrProduct extends Control {
//put your code here
/**
* Vyrendrování komponenty
*/
public function render() {
// načtu soubor se šablonou
$template = $this->template;
$template->setFile(dirname(__FILE__) . '/FiltrProduct.latte');
// a vykreslíme ji
$template->render();
}
/**
* Formulář komponenty filtru
* @param type $name
* @return \Nette\Application\UI\Form
*/
protected function createComponentSignInForm($name) {
$form = new Form($this,$name);
$form->addSubmit('galerie', '')
->setDefaultValue("galerie")
->setAttribute('class', 'galerieIco')
->setAttribute('title', 'Zobrazit jako galerii.')
->onClick[] = callback($this, 'processFilterGal');
$form->addSubmit('sobrazky','')
->setAttribute('class', 'sObrazky sObrazkyUp')
->setAttribute('title', 'Zobrazit s obrázky.')
->onClick[] = callback($this, 'processFilterSobr');
$form->addSubmit('cenik', '')
->setAttribute('class', 'cenik')
->setAttribute('title', 'Zobrazit jako cenník.')
->onClick[] = callback($this, 'processFilterList');
$form->onSuccess[] = callback($this, 'processFilter');
if($form->isSubmitted()){dd("Formulář je odeslám!");}
return $form;
}
/**
* zpracování formuláře
* @param UI\form $form
*/
public function processFilter($form){
$values = $form->values;
dd($values, "ddasfsaf");
}
}
?>
Presenter:
<?php
class ZboziPresenter extends BasePresenter {
/**
* Komponenta filtrování obsahu (akce, sklad, značka atd.)
*/
protected function createComponentFiltrProduct($name){
return new \FiltrProduct($this,$name);
}
}
?>
Editoval ondra310 (18. 7. 2012 15:01)
- ondra310
- Člen | 25
Tak si odpovím sám :-)
Uvedené chování způsobuje metoda ->setDefaultValue("")
na
buttonu. Přitom pokud se nepletu, tak mít hodnotu na tlačítku není proti
pravidlům html a myslím, že i podle API submitu to jde použít.
Nejhorší je asi ta chybová hláška, podle které jsem opravdu moc nepochopil
v čem je problém.
Přiznávám se, že chyba vznikla spíše nedopatřením a psaním kódu stylem
ctrl+c + ctrl+v :-) a default value jsem tam na nic neměl, ale dovedu si
představit situaci, kdy by se mi mohla hodit.