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
+
0
-

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
+
0
-

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)