Null hodnoty po odeslání formuláře
- fikusir
- Člen | 27
Ahoj,
bohužel si nevím rady s tímto triviálním problémem a po 3 hodinách zkoušení se raději obrátím na Vás.
Po odeslání formuláře mi v metodě saveDatePressed skočí chyba, že setDefaultValue u addText nemůže být null.
Upřímně nechápu 2 věci:
- Proč se neprovede redirect, ale formulář se znovu zkouší načíst
- Proč je to null
Moc díky
private $deliveryid;
private $dispatch_date;
private $deliveryManager;
private $logdeliveryManager;
public function __construct(DeliveryManager $deliveryManager, LogdeliveryManager $logdeliveryManager){
$this->deliveryManager = $deliveryManager;
$this->logdeliveryManager = $logdeliveryManager;
}
public function renderDefault(Int $id): void
{
$this->deliveryid=$id;
$this->dispatch_date=$this->deliveryManager->getSingle($id)->dispatch_date;
$this->template->deliveryid=$id;
}
protected function createComponentEditdateForm(): UI\Form
{
$form = new UI\Form;
$form->addText('dispatch_date', 'Datum:')
->setHtmlType('datetime-local')
->setRequired("Pole %label je povinné")
->setDefaultValue($this->dispatch_date->format('Y-m-d\TH:i'));
$form->addHidden('delivery_id')->setDefaultValue($this->deliveryid);
$form->addSubmit('save', 'Uložit datum expedice')->setHtmlAttribute('class','btn btn-success')->onClick[] = [$this, 'saveDatePressed'];
return $form;
}
public function saveDatePressed($button, $values): void
{
$dispatch_date=DateTime::from($values->dispatch_date);
$this->deliveryManager->setDateTime((Int)$values->delivery_id,$dispatch_date->format('Y-m-d H:i' ));
$this->logdeliveryManager->put((Int)$values->delivery_id,$this->getuser()->getId(),"Došlo ke změně času nakládky na " . $dispatch_date->format('d.m.Y H:i' ));
$this->redirect("Delivery:edit", $values->delivery_id);
}
Editoval fikusir (9. 9. 2021 9:42)
- Kamil Valenta
- Člen | 820
addText může mít null jako defaultValue, problém je, že nad tím voláš
->format.
Pokud je tedy $this->dispatch_date null, zavolá se null->format() a to
už špatně je.
Třeba takto, ale možností je mnoho:
$form->addText('dispatch_date', 'Datum:')
->setHtmlType('datetime-local')
->setRequired("Pole %label je povinné")
->setDefaultValue(!empty($this->dispatch_date) && is_object($this->dispatch_date) ? $this->dispatch_date->format('Y-m-d\TH:i') : null);
Pokud se Ti nevolá redirect, dumpni si ve formu getErrors(), patrně to neprochází validací…
- fikusir
- Člen | 27
Kamil Valenta napsal(a):
addText může mít null jako defaultValue, problém je, že nad tím voláš ->format.
Pokud je tedy $this->dispatch_date null, zavolá se null->format() a to už špatně je.Třeba takto, ale možností je mnoho:
$form->addText('dispatch_date', 'Datum:') ->setHtmlType('datetime-local') ->setRequired("Pole %label je povinné") ->setDefaultValue(!empty($this->dispatch_date) && is_object($this->dispatch_date) ? $this->dispatch_date->format('Y-m-d\TH:i') : null);
Pokud se Ti nevolá redirect, dumpni si ve formu getErrors(), patrně to neprochází validací…
No já jsem pitomec, máš pravdu. Moc díky za nasměrování :) Samozřejmě už to valí!