formulář select odesíla null misto hodnot
- Domki
- Člen | 310
Nevíte někdo čím to je že když mam metodu na vytvoreni formulare
protected function createComponentZboziDetailDoKosikuForm()
{
$form = new Form();
$form->addHidden('idZb', $this->detailZbozi["id"]);
$form->addSelect('varianta', 'Varianta', $this->nastavVarianty($this->detailZbozi["varianty"]))->setDefaultValue($this->varianta);
$form->addText('pocet', 'Počet', 5, 3)->addRule(Form::INTEGER, 'Počet zboží musí být číslo od 1 do 100.')->addRule(Form::RANGE, 'Počet zboží musí být číslo od %d do %d.', array(1, 100));
........
metoda nastavVarianty nastavi hodnoty kdyz tuto metodu dumpnu vypise to sprvavne:
array(6) {
34 => "34 cm" (5)
40 => "40 cm" (5)
44 => "44 cm" (5)
48 => "48 cm" (5)
52 => "52 cm" (5)
56 => "56 cm" (5)
}
Když ale pak v metode po odeslani formulare
zboziDetailDoKosikuFormSubmited(Form $form)..
provedu takto dump
dump($form->values);
die;
Vypíše to
Nette\ArrayHash(3) {
idZb => "71" (2)
varianta => NULL
pocet => "1"
}
Jak to že promena varianta je null když do ni predavam tamto pole, a
i v kodu kdyz se podivam tak je select s option tagy normalne vypsany?
Díky
Edit: ted jsem zjistil ze kdyz misto volani metody tam dam pole
array(„34“=>„34“, „40“=>„40“…);
Tak to funguje tak asi je problem v tom kdyz to dela metoda ale kde?
public function nastavVarianty($varianty)
{
$jednotliveVar=explode(",", $varianty);
$i=0;
$poleVar = array();
while( isset($jednotliveVar[$i]))
{
if( is_numeric(substr($jednotliveVar[$i], 0, 1)) )// kdyz je prvni znak cislo ( 15, 35, 16.5)
{
if($jednotliveVar[$i] < 32) //na palce
$znak="\"";
else //na cm
$znak=" cm";
}
else //nic - pismena
$znak="";
$poleVar[$jednotliveVar[$i]] = $jednotliveVar[$i].$znak;
$i++;
}
return $poleVar;
}
Editoval Domki (31. 7. 2012 10:41)
- Domki
- Člen | 310
Co opravdu nikdo nevíte proč to vrací NULL, když ostatní položky
z formuláře se odesílají normálně, a kdyz sem vložim sam pole tak se to
odešle taky dobře. Přitom když tam davam položky z dtb tak to do
formuláře vkláda stejny položky ale už to odesíla null
? Díky za každou radu
- ViPEr*CZ*
- Člen | 817
Funguje to tak, že pokud je v selectu něco vidět… a submitne (odešle) se formulář, pak to ještě neznamená, že nette Vám ve $form->values něco vrátí… pozor na to… $form->values se nerovná klasickému získání dat z POST. Protože když si před $form->values ještě dumpnete hodnotu $_POST, pak se vsadím, že tam data budou. Takže ještě než se to celé dostane do metody pro zpracování odeslání formuláře, tak musí existovat onen odeslaný selectbox a musí být naplněn daty, která očekávate ze submitu.
- Domki
- Člen | 310
tak ted sem to orezal a zustal tam jen form a hlidac na odeslani
asi takto:
<?php
use Nette\Application\UI\Form;
use Nette\Database\Connection;
use Nette\Image;
/**
* Presenter na výpis detailu zboží
*
* @author Petr Domkař
*
*
*/
class DetailZboziPresenter extends BasePresenter
{
protected function createComponentZboziDetailDoKosikuForm()
{
$id = 74;
dump($id);
$varianty = $this->context->createZbozi()->where('id', $id)->fetch();
$jednotliveVar = explode(",", $varianty["varianty"]);
$form = new Form();
$form->addSelect('varianta', 'Varianta', $jednotliveVar);
$form->addText('pocet', 'Počet');
$form->addSubmit('doKosiku', 'Do košíku');
$form->onSuccess[] = callback($this, 'zboziDetailDoKosikuFormSubmited');
return $form;
}
public function zboziDetailDoKosikuFormSubmited(Form $form)
{
dump($form->values);
}
}
Takto to funguje ale kdyz získaní id delam pomoci metody $id =
$this->getParameter(‚id‘);
Tak uz to tam haze null
Jak tedy mám získat parametr z url?
Jinak odkaz na toto url je:
<a n:href=„DetailZbozi:detailzbozi id ⇒
$polozkaZb->id“>{$polozkaZb->nazev}</a>
a to url pak vypada takto:
http://localhost/…tailzbozi/74
Editoval Domki (31. 7. 2012 21:56)
- Domki
- Člen | 310
No Tak uz to de
Stacilo ten parametr priradit do promeny a tu oznacit jako /**
@persistent */ – tim se sama prenasi na dalsi stranku pri odeslani
formulare?
A jestli teda dobre chapu to co psal viper
Tak on se odesle formular ale aby se hodnoty zobrazily v $form->values tak
musí byt dostupny i to id pomoci ktery se udela dotaz a vypisou se formulare,
i kdyz stejne po odeslani formulare na konci metody presmeruju jinam?
- ViPEr*CZ*
- Člen | 817
Ahoj… ano… pokud plníte hodnoty do formuláře z databáze, pak se
vytáhnou… naplní se formulář… porovnají se hodnoty a vyplní se
výstupní pole (zjednodušeně řečeno). Pak si uděláte nějakou vlastní
akci v metodě zpracování formuláře.
O persistentních parametrech se píše v dokumentaci. Samozřejmě pokud jste
plnil data na základě výběru podle nějakého ID z databáze, pak toto ID
se již nepřeneslo z URL při odeslání formuláře a tudíž se do
formuláře nic nevyplnilo.