Jak napsat DI extension pro registraci nového formulářového prvku?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Šaman
- Člen | 2659
Ahoj, mám klasický obligátní DatePicker a přemýšlel jsem jak ho elegantně přidat do aplikace, když nechci vytvářet vlastního potomka třídy Form.
Napsal jsem si tedy extension, ale z nějakého důvodu po promazání cache (nebo změně v souboru) napoprvé funguje a při dalších requestech už nikoliv. Napadá mě jen, že DI kontejner je nakešovaný a proto není potřeba ho znovu vytvářet a tedy se vůbec nevykoná můj kód. Máte s tím někdo zkušenosti, pls?
<?php
namespace Saman\Forms;
use Nette\DI\CompilerExtension,
Nette\Forms\Container;
class DatePickerExtension extends CompilerExtension
{
public function beforeCompile()
{
Container::extensionMethod('addDatePicker', function (Container $container, $name, $label = NULL)
{
return $container[$name] = new DatePicker($label);
}
);
}
}
?>
Nebo kam jinam to psát, když to nechci v bootstrapu?
- Tomáš Votruba
- Moderator | 1114
Napadá mě jen, že DI kontejner je nakešovaný a proto není potřeba ho znovu vytvářet a tedy se vůbec nevykoná můj kód.
Je to tak.
Koukni na Nextras\Forms
Editoval Tomáš Votruba (17. 8. 2014 23:25)