Call to a member function setDeliveryId() on null
- Johnczek
- Člen | 37
Zdravím, mám takový problém. Mám presenter zastřešující objednávku. V něm mám referenci na objekt order (objednávky) a basketu (košíku). Košík se inicializuje v basepresenteru (od kterého všechny presentery dědí) aby byl dostupný všude na stránce.
basket do presenteru dostávám takto
public function beforeRender() {
$this->basket = parent::getBasketModel();
$this->order = new Order($this->database, $this->basket, $this->user->id);
blabla
}
Pak v jedné šabloně využívám formulář kde volím dopravu a platbu. ten vykreslím a odešlu. Takto vypadá má succeded metoda na daný formulář
public function ChoosePaymentAndDeliverySucceeded(Form $form) {
$data = $form->getHttpData();
$this->order->setDeliveryId($data->delivery);
$this->order->setPaymentTypeId($data->payment);
$this->redirect('Order:user');
}
Tady ovšem nastává problém. Order asi není ještě incializovaný a hlásí to chybu Call to a member function setDeliveryId() on null. zkoušel jsem dát pvrvní dva řádky do before render do startupu, případně konstruktoru ale skončilo to buď stejně nebo jsem zase volal null nad košíkem (v basepresenteru inicializuji košík ve startup metodě a ta asi ještě při konstrukci orderpresenteru neproběhla).
Moc se mi nechce řešit tento problém tak že bych si někam uložil dané zvolené ID a po inicializaci orderu bych je tam z třídní proměnné presenteru nasypal. Existuje nějaké „elegantní“ řešení? Například zavolání before renderu před succeded metodou? (kdy už by byly všechny objekty incializované?)
- David Matějka
- Moderator | 6445
ahoj, koukni se na zivotni cyklus presenteru, beforeRender se vola az po zpracovani signalu (formulare), takze to presun treba do startupu