Nezobrazujici se datum pri editaci

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

Zdravím.

Verze nette 2.0 stable
Php 5.3 s namespace

Ze záhadného důvodu se mi nenačtou hodnoty datumu do formuláře při editaci. Ale vše funguje, když vyplním datum v akci add tak je v db ulozen. To samé se děje i při editu, ale nevyplní se mi v editu polička s datumama. Naprosto nechápu, z jakého důvodu.

Pokud přes var_dump zobrazím co dotaz obsahuje při zavolání editu, tak obsahuje datum, ale prostě se v editu nevyplní, jinak vše ostatní se vyplní.

[„datum_schvaleni“]⇒ object(Nette\DateTime)#202 (3) { [„date“]⇒ string(19) „2012–03–31 00:00:00“ [„timezone_type“]⇒ int(3) [„timezone“]⇒ string(13) „Europe/Prague“ }

edit.latte

...
<tr><td>{label datum_schvaleni /}</td><td>{input datum_schvaleni}</td></tr>
<tr><td>{label datum_ukonceni /}</td><td>{input datum_ukonceni}</td></tr>
...

Dystak jak vypada akce Edit

    public function renderEdit($id = 0) {
        $this['klientForm']['save']->caption = 'Upravit klienta';
        $form = $this['klientForm'];
        if (!$form->isSubmitted()) {
           var_dump($row = $this->context->createklient()->get($id));
            if (!$row) {
                $this->error('Klient nebyl nalezen.');
            }
            $form->setDefaults($row);
        }
    }
//A pro jistotu uvadim i form

protected function createComponentKlientForm() {

        $cislo = $this->context->createKlient()->order('klient_cislo')->count('klient_cislo');

        $form = new Form;

        $form->addText('klient_cislo', 'Číslo klienta: ')->setDefaultValue(++$cislo);

        $form->addText('klient_titul', 'Titul: ');
        $form->addText('jmeno', 'Jméno: ')->setRequired('Zadejte prosím jméno');
        $form->addText('prijmeni', 'Příjmení: ')->setRequired('Zadejte prosím příjmení');
        $form->addText('klient_telefon', 'Telefon: ')
                ->addRule(Form::INTEGER, 'Pole telefon musí být čísla')
                ->setRequired('Zadejte prosím Telefon');
        $form->addText('email', 'Email: ')->setDefaultValue("@")->setRequired('Zadejte prosím email');

        $form->addText('klient_mesto', 'Město: ')->setRequired('Zadejte prosím město');
        $form->addText('klient_ulice', 'Ulice: ')->setRequired('Zadejte prosím ulici');
        $form->addText('klient_psc', 'Psč: ')->setRequired('Zadejte prosím psc');

        $form->addText('klient_firma', 'Firma: ');
        $form->addText('klient_firma_ico', 'Ič: ');
        $form->addText('klient_firma_dic', 'Dič: ');

        $form->addText('klient_platba', 'Platba: ')->setRequired('Zadejte prosím platbu');
        $form->addText('klient_tarif', 'Tarif(Mbps): ');
        $form->addText('datum_schvaleni', 'Datum schválení: ');
        $form->addText('datum_ukonceni', 'Datum ukončení: ');
        $form->addHidden('datum_pridani');

        $form->addText('klient_ip', 'IP adresa: ')->setRequired('Zadejte prosím ip adresu');
        $form->addText('klient_verejna_ip', 'Veřejná IP: ')->setDefaultValue("0.0.0.0");
        $form->addText('klient_mac_adresa', 'MAC adresa: ')->setDefaultValue("00:00:00:00:00:00");

        $form->addText('username', 'Uživatelské jméno: ');
        $form->addTextArea('klient_poznamka', 'Poznámka: ');
        $form->addSubmit('save', 'Přidat klienta')->setAttribute('class', 'default');
        $form->addSubmit('cancel', 'Zrušit')->setValidationScope(NULL);
        $form->onSuccess[] = callback($this, 'klientFormSubmitted');

        $form->addProtection('Prosím odešlete formulář znova (Ochránný token expiroval).');
        return $form;
    }

Editoval TheNEoo (17. 3. 2012 23:17)

mochja
Člen | 20
+
0
-

„Chyba“ je pravdepodobne na strane Nette

class test {

	public function __toString() {
		return 'test';
	}

}
public function createComponentMyForm() {

	$form = new \Nette\Application\UI\Form;

	$test = new test;

	$form->addText('test', 'test:')->setDefaultValue((string) $test); // test
	$form->addText('test1', 'test1:')->setDefaultValue($test); // clean

	return $form;
}

Tvoj problém by mohol taktiež vyriešiť napr. https://componette.org/search/?…

Editoval mochja (18. 3. 2012 0:00)

duke
Člen | 650
+
0
-

Nette by asi mohlo umět v Nette\Forms\Controls\TextBase::setValue převádět objekty na stringy automaticky (alespoň ty, které mají metodu __toString). A pokud tomu něco brání, tak by mělo v takových případech přinejmenším vyhodit výjimku Nette\InvalidArgumentException.

TheNEoo
Člen | 75
+
0
-

Docela me to prekvapilo jelikoz v Nette 0.9.x Mi to normalne jelo bez problemu rozchodil sem to teda az z datepickerem Dekuji za pomoc uz sem ztim byl vyrizenej :)

David Grudl
Nette Core | 8228
+
0
-

Nejsem si úplně jist, jestli je vhodnější automaticky převádět objekty na string nebo reagovat vyhozením výjimky…