Předávání hodnot z presenteru do selectboxu formuláře pomocí setItems
- samic
- Člen | 18
Ahoj, mám takový menší problém s funkcí setItems…
V presenteru si z databáze vytáhnu potřebná data, uložím do pole a toto pole předávám pomocí setItems($pole, TRUE) selectboxu formuláře. Vše proběhne v pořádku – jednotlivé položky selectboxu jsou oindexovány správně – avšak jakmile submitnu formulář a pomocí getValues() získávám hodnoty z formuláře a následně je ukládám do databáze tak mi Laděnka hlásí chybu že selectbox vrací hodnotu ‚null‘…
Setkal jste se s tímto už někdo? Když si u jiného formuláře vytvářím podobně pole hodnot pro selectbox přímo v konstruktoru tak mi to tyto problémy nedělá.
Předem děkuji za odpověď a případné tipy :-)
- samic
- Člen | 18
<?php
$turnaje = TurnajeModel::getByIDsouteze($id_souteze);
foreach($turnaje as $turnaj)
{
$fotogalerie = FotogalerieModel::getByIDturnaje($turnaj['ID_turnaje']);
if(!$fotogalerie) $foto_turnaje[$turnaj['ID_turnaje']] = $turnaj['Nazev'];
}
$this['fotogalerieForm']['id_turnaje']->setItems($foto_turnaje, TRUE);
?>
- samic
- Člen | 18
funkce v presenteru
<?php
public function renderZobrazitFotogalerie($id_souteze) {
$result = FotogalerieModel::getByIDsouteze($id_souteze);
foreach($result as $key => $fotogalerie)
{
$turnaj = TurnajeModel::getByIDturnaje($fotogalerie['id_turnaje']);
$result[$key]['Nazev'] = $turnaj['Nazev'];
$result[$key]['Datum'] = $turnaj['Datum'];
}
$this->template->fotogalerie = $result;
$soutez = SoutezeModel::getByIDsouteze($id_souteze);
$this['fotogalerieForm']['ID_fotogalerie']->setValue('0');
$this['fotogalerieForm']['id_souteze']->setValue($id_souteze);
$turnaje = TurnajeModel::getByIDsouteze($id_souteze);
foreach($turnaje as $turnaj)
{
$fotogalerie = FotogalerieModel::getByIDturnaje($turnaj['ID_turnaje']);
if(!$fotogalerie) $foto_turnaje[$turnaj['ID_turnaje']] = $turnaj['Nazev'];
}
$this['fotogalerieForm']['id_turnaje']->setItems($foto_turnaje, TRUE);
$this->template->soutez = "". $soutez['Nazev'] ." ". $soutez['Sezona']."";
$this->template->id_souteze = $id_souteze;
}
?>
v sablone zobrazitFotogalerie potom vypisuji tento formular:
<?php
public function __construct($parent, $name) {
parent::__construct($parent, $name);
$this->addHidden('ID_fotogalerie');
$this->addHidden('id_souteze');
$this->addSelect('id_turnaje', 'Vyber turnaj:');
...
}
?>
a pomoci getValues() získávám jeho hodnoty při jeho zpracování – všechny hodnoty předá správně až na id_turnaje
- Tomáš Kolinger
- Člen | 136
Plnit šablonu v action
je proti srsti, na to je přeci
render
.
Takže nejlépe oddělit z render
komunikaci s modelem a
přesunout pod action
, v render
nechat jen nastavení
dat do šablony.
- Tomáš Kolinger
- Člen | 136
Formulář se zpracovává před vykreslením. Tím pádem při zpracování formuláře nemá select prvky a Nette kontroluje, zda odeslaná hodnota v selectu existuje, ta ale neexistuje – takže NULL.
Editoval Tomáš Kolinger (26. 2. 2013 7:23)
- samic
- Člen | 18
ahoj všichni,
obracím se na Vás ještě s jedním dotazem – podobný jako je ten původní – s tím rozdílem že ve FrontPresenteru si plnim ve funkci beforeRender() RadioList hodnotami uloženými v poli a při submitnutí formuláře mi opět předává RadioList NULL – resenim by bylo opět přesunout plnění RadioListu do action – moje otázka tedy zní – existuje neco jako actionBeforeRender()???
Předem děkuji za odpověď, nápady a rady ;-)
- Jan Mikeš
- Člen | 771
V tom pripade delas neco spatne! Nasledujici kod jsem ted testoval a
funguje:
Btw, dalsi moznost je plnit data primo v tovarnicce.
protected function startup() {
parent::startup();
$this["testForm"]["test"]->setItems(array("test" => "test"));
}
protected function createComponentTestForm(){
$form = new Nette\Application\UI\Form;
$form->addSelect("test");
return $form;
}