Formuláře setDefaults() místo 2012–09–08 vrací 2012–09–08 00:00:00
- newbie
- Člen | 31
Zdravím,
s Nette teprve začínám, tak vůbec netuším jestli je to chyba nebo
vlastnost …
Verze Nette: 2.0.5, verze PHP: 5.3.4
Dostal jsem se k formulářům a editaci dat z databáze a mám
následující problém.
Pokud si vytvořím formulář:
<?php
protected function createComponentAlbumForm() {
$genrePairs = $this->genres->findAll()->fetchPairs('id', 'title');
$form = new Form();
$form->addText('title', 'Název alba:', 3, 40)
->addRule(Form::FILLED, 'Je nutné vyplnit název alba');
$form->addText('publish', 'Datum vydání:')
->setType('date')
->addRule(Form::FILLED, 'Vyplňte datum vydání alba.');
$form->addSelect('genre_id', 'Žánr', $genrePairs)
->setPrompt('Vyberte žánr')
->addRule(Form::FILLED, 'Vyplntě žánr')
;
$form->addSubmit('create', 'Přidat album');
$form->onSuccess[] = callback($this, 'taskFormSubmitted');
return $form;
}
?>
a předám mu data,
<?php
public function actionEdit($id) {
$this->album = $this->albums->find($id);
$this["albumForm"]->setDefaults($this->album);
}
?>
vše se vyplní správně až na $form->addText(‚publish‘… Datum se do formuláře předa ve formátu value=„2012–09–08 00:00:00“ místo value=„2012–09–08“. Databáze na dotaz vrací datum jako 2012–09–08 (publish má nastavený DATE). IE a FF type:date neumí tak vypíšou klasický „text“ 2012–09–08 00:00:00 a Chrome s Operou 2012–09–08 00:00:00 nepochopí, ale vyhodí kalendář s prázdným datumem. No a o co mi jde? Proč mi místo 2012–09–08 setdefaults rve do formulářů 2012–09–08 00:00:00
- Ascaria
- Člen | 187
newbie napsal(a):
Díky moc funguje. Ale nechápu, jaký to má důvod, převádět Date na DateTime…
Protože DateTime je preciznější a je jednodušší mít jeden datumovej objekt. Select query nezjišťuje typ sloupku.
Můžeš volit formát ručně:
if($this->album->publish instanceof \Nette\DateTime) {
$this->album->publish = $this->album->publish->format('Y-m-d');
}
defaultní __toString() má totiž return $this->format(‚Y-m-d H:i:s‘);