Továrničky na komponenty s Multiplierem pomocí anotace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Pro pohodlnou práci s Nette\Application\UI\Multiplier (viz konec přednášky Honzy Tvrdíka či vlákno na fóru) jsem si do BasePresenteru doplnil pár řádků kódu, díky kterým nemusím v továrničkách multipliovaných komponent psát lambda funkci. Využívám anotace a výsledný kód pak může vypadat třeba takto:

class ArticlesPresenter extends BasePresenter
{

	/**
	 * @multiple
	 */
	public function createComponentCommentsControl($articleId)
	{
		return new CommentsControl($articleId);
	}

}

Nevýhoda je, že takovéto továrničky nemohou být protected (musela by se používat reflexe a setAccessible(), což není hezké), ale v PHP 5.4 tento problém odpadá (viz gist).

Zdrojový kód: https://gist.github.com/2142331

Filip Procházka
Moderator | 4668
+
0
-

Reflexi stejně využíváš na čtení annotací, tak kde je problém? Každopádně nápad super!

Nox
Člen | 378
+
0
-

Skvělý nápad
Upravil jsem to na libovolné množství argumentů: https://gist.github.com/2145394

Sice tam musí být createDataset, ale ten kód někde stejně být musí, okolo tohoto už asi cesta není.

Každopádně super

pepakriz
Člen | 246
+
0
-

Něco takového používám u všech controlů z DI (viz https://github.com/…resenter.php#L150). Mám tam ještě jednu úpravu a to možnost použít komponentu jak s tak i bez multiplieru. Více zde https://github.com/…wiki/Widgety