Při odeslání se ztratí value pro select

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

Mám Componentu formuláře kde mám addSelect:

form->addSelect('id_cartrige', 'Polštářek:', $this->shopCartige);

Pole doplním z databáze v renderu:

 foreach ($cartrige as $v ) {
$this->shopCartige[$v['id']] = $carName[$v['id_type_cartrige']];
  }

Při zobrazení formuláře se vše zobrazí id jako hodnota a název.
Ale když odešlu formulář hodnoty se ztratí.

Nevíte co je špatně?

Ot@s
Backer | 476
+
0
-

Plnění hodnot selectu v renderu je z hlediska životního cyklu špatně. V době, kdy se zpracovává signál submitnutého formuláře, neobsahuje select žádné hodnoty – proto se hodnoty „ztratí“. Ideální je plnit hodnotu/hodnoty přímo v metodě, kde vytváříš formulář.

breeta
Člen | 68
+
0
-

Jak mám ale přenést id do cyklu?
Tohle funguje když převezmu id z render:

$form->addHidden('id_stamp', $this->id);

ale když mám v Component:

foreach ($this->context->createCartrige()->where('id_stamp',$this->id) as $v ) {
                  $cartige[$v['id']] = $carName[$v['id_type_cartrige']];
           }

Tak se id nepředá …

Ot@s napsal(a):

Plnění hodnot selectu v renderu je z hlediska životního cyklu špatně. V době, kdy se zpracovává signál submitnutého formuláře, neobsahuje select žádné hodnoty – proto se hodnoty „ztratí“. Ideální je plnit hodnotu/hodnoty přímo v metodě, kde vytváříš formulář.

Editoval breeta (23. 1. 2013 9:56)

Ot@s
Backer | 476
+
0
-

Z výše uvedeného jsem zmatený. Kde/čím plníš $this->id? Musíš uvést více kódu.

breeta
Člen | 68
+
0
-

Přberu ho z renderDetail($id) {
$this->id = $id;
}

Ot@s napsal(a):

Z výše uvedeného jsem zmatený. Kde/čím plníš $this->id? Musíš uvést více kódu.

Editoval breeta (23. 1. 2013 11:34)

breeta
Člen | 68
+
0
-

Nikdo neporadí jak přenést id z render do komponenty pro select?
Ten příklad pro select co jsem napsal jde jenom když id nastavím jako persistent …

Tabetha
Člen | 140
+
0
-

to neni že nikto neporadí … prosto pošli viac kódu .. celú tú komponentu a render metodu .. ako príklad

leninzprahy
Člen | 150
+
0
-

zkus to dát do actionDetail($id), action se zpracovává dříve než signál submitnutého formuláře

Korektně by to ale asi mělo být, že v továrničce předáš komponentě to $id, něco jako

protected function createComponentMoje() {
	$komponenta = new MojeKomponenta();
	$komponenta->setId($this->getParam('id'));
	return $komponenta;
}
breeta
Člen | 68
+
0
-

Dobře tak ještě jednou příklad:

renderDetail() {
$this->id = 9; // id které je v databázi

}

V component

   function createComponentOrderForm()
 {

               $carName = $this->getCartrigeTable();
               foreach ($this->context->createCartrige()->where('id_stamp',$this->id) as $v ) {
                               $cartige[$v['id']] = $carName[$v['id_type_cartrige']];
                        }
// vytvoří pole klíč id

    $form = new Form;
    $form->addSelect('id_cartrige', 'Polštářek:', $cartige);
    $form->addSubmit('send', 'Vložit');
    $form->onSuccess[] = callback($this, 'addCartSubmitted');
    return $form;
}

Při zobrazení vše OK v select ale při odeslání se hodnota id ztratí a nevytáhne se pole z databáze.

Tabetha napsal(a):

to neni že nikto neporadí … prosto pošli viac kódu .. celú tú komponentu a render metodu .. ako príklad

jiri.pudil
Nette Blogger | 1032
+
0
-

Přečti si, co píše výše soudruh @leninzprahy:

zkus to dát do actionDetail($id), action se zpracovává dříve než signál submitnutého formuláře

breeta
Člen | 68
+
0
-

Díky pomohlo dát action místo render …