Null hodnoty po odeslání formuláře

fikusir
Člen | 27
+
0
-

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:

  1. Proč se neprovede redirect, ale formulář se znovu zkouší načíst
  2. 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
+
0
-

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
+
0
-

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í!