Autowire formuláře do presenteru a cyklická závislost

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

Ahoj,

pokusil jsem se dle návodu https://doc.nette.org/cs/forms#… vytvořit vlastní třídu extendující \Nette\Application\UI\Form a následně ji definovat jako službu, aby se mi injectovala do presenteru a narazil jsem na problém cyklické závislosti.

<?php
class TestForm extends \Nette\Application\UI\Form
{
	public function __construct(\Nette\ComponentModel\IContainer $parent = NULL, $name = NULL)
	{
		parent::__construct($parent, $name);
		$this->addText('name', 'Jméno:');
	}

	public function create()
	{
		return new self();
	}
}
?>

a v neonu mám

common:
	services:
		testFormFactory:
			class: \TestForm

A dostanu výjimku:

Nette\InvalidStateException
Circular reference detected for services: testFormFactory.

Jediné řešení které jem našel je v neonu udělat toto, ale nepřijde mi to zrovna cool.

common:
	services:
		testFormFactory:
			class: \TestForm(NULL, NULL)

Tušíte co s tím?

mkoubik
Člen | 728
+
0
-

Ty parametry konstruktoru tam být nemusí, jsou tam jen z historických důvodů.

    public function __construct()
    {
        parent::__construct();
        $this->addText('name', 'Jméno:');
    }
service:
	testFormFactory:
		class: Testform

A BTW: formulář a tovarničku na něj bych rozdělil do 2 tříd. Použij třeba generované továrničky.

2bfree
Člen | 248
+
0
-

Děkuji,

ten hint s oddělenou generovanou továrnou pomohl a jedničku.