Továrničky na komponenty s Multiplierem pomocí anotace
- Vojtěch Dobeš
- Gold Partner | 1316
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
Reflexi stejně využíváš na čtení annotací, tak kde je problém? Každopádně nápad super!
- Nox
- Člen | 378
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
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