Ako v service vytvorit template?

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

Caute mam nejaku sluzbu a potrebujem v nej vytvorit template, ako vytvorim template v ktorej budu aj macra ktore sa registruju v estension. Potrebujem mamt template ktora ma makra a helpery ktore ma Control sablona, ako to mam riesit?

class OrderPdf extends Object
{
	private function createTemplate()
	{
		$template = new FileTemplate();
		$template->registerFilter(new Engine());
		$template->registerHelperLoader('Nette\Templating\Helpers::loader');

		return $template;
	}
}
Jan Suchánek
Člen | 404
+
0
-

@duskohu: Aha, proč ta service není komponentou?

duskohu
Člen | 778
+
0
-

Lebo ju potrebujem pouzit v Evente, a tam komponentu nezavolam.

Editoval duskohu (30. 11. 2013 0:59)

enumag
Člen | 2118
+
0
-

Dokud v Nette není TemplateFactory jako service tak nejjednodušší hack je asi injectnout Application a použít:

$template = $this->application->getPresenter()->createTemplate();

Koukám že ta metoda je protected takže ještě tohle do BasePresenteru:

public function createTemplate($class = NULL)
{
	return parent::createTemplate($class);
}

Že to není čisté je asi každému jasné, ale to osobně považuji za chybu Nette. Čisté řešení je imho služba TemplateFactory což znamená duplikovat kód z Presenteru a i tahle služba bude hacknutá aby bylo možné generovat odkazy.

Editoval enumag (29. 11. 2013 23:33)