Při odeslání se ztratí value pro select
- breeta
- Člen | 68
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ě?
- breeta
- Člen | 68
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)
- leninzprahy
- Člen | 150
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
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
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