Problém DI (@inject) – Undefined variable

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

Zdravím,

mám tady problém se kterým si nevým rady :/…

Třídu Stock vkládám do OrdersPresenteru takto:

/**
* @var App\Stock
* @inject
*/
private $stock;

Poté ji chci použít ve formuláři, aby se hodnota z DB nastavila jako defaultní hodnota u textarea:

protected function createComponentNoteForm()
	{
        $form = new Nette\Application\UI\Form;
		$form->addTextArea('note', '')
                        ->setDefaultvalue($stock->getNote($orderId));

		$form->addSubmit('send', 'Save')
                        ->setAttribute('class', 'form_submit_button');

		$form->onSuccess[] = $this->registerFormSucceeded;
		return $form;
	}

Vypisuje chybu: Undefined variable: stock
//Vždyť jsem ji definoval snad hned za DI nebo ne? (private $stock;)

Zkoušel jsem i $stock = new /App/Stock;, ale ani to nepomohlo :/.

Neví někdo, co s tím?

Děkuji, sd

David Kudera
Člen | 455
+
+3
-

pokud chceš takhle injectovat, tak ta proměnná musí být public. Druhá možnost je použít inject metody a nebo úplně nejlíp konstruktor. Pak to může být i private

Editoval David Kudera (9. 9. 2014 11:36)

Oli
Člen | 1215
+
0
-

Pokud používáš property injection musí být ta proměnná public

public $stock;
sd
Člen | 87
+
0
-

Ani public nepomohlo, vyhazuje stále stejnou chybu :/

Michal Vyšinský
Člen | 608
+
+1
-

Měl bys volat $this->stock a ne jen $stock. S DI to víceméně nemá nic společného.

Editoval Michal Vyšinský (9. 9. 2014 11:53)

Mysteria
Člen | 797
+
0
-

Tak nemůžeš to mít takhle:

$form->addTextArea('note', '')->setDefaultvalue($stock->getNote($orderId));

Ale takhle:

$form->addTextArea('note', '')->setDefaultvalue($this->stock->getNote($orderId));
sd
Člen | 87
+
0
-

Děkuji moc za odpovědi, funguje to ;)