Registrace helperu s funkcí

- Tomáš Votruba
 - Moderator | 1114
 
Zdravím. Potřebuji v basePresenteru volat helperem nestaticou funkci.
<?php
// ideálně něco takového
$template->registerHelper("helperName", "helperFunction");
// odkáže na aktuální presenter
$template->registerHelper("helperName", callback($this, "helperFunction"));
?>
Dál už mne nic nanapadá, resp. samé nefunkční věci.
Také by mne zajímalo, zda se parametry předají automaticky, případně jak na to. Díky.
Editoval Schmutzka (22. 11. 2011 10:47)

- Filip Procházka
 - Moderator | 4668
 
Vždyť jsi řešení sám napsal
$template->registerHelper("helperName", callback($instanceTridy, "metoda"));
				
- Tomáš Votruba
 - Moderator | 1114
 
Díky, super. Ještě to na mě teďka křičí, že musí jít o statickou
metodu.
Co když budu potřebovat používat databázi, tedy dynamický přístup
($this->...)?
Editoval Schmutzka (12. 12. 2011 10:00)

- Tomáš Votruba
 - Moderator | 1114
 
Db jsem řešil dříve, to už bych věděl.
Aktuálně potřebuji získat $basePath, ke které se přes
$this->basePath ve statické funkci nedostanu. (Náhrada
specifického textu obrázky.)

- Elijen
 - Člen | 171
 
Nevim jak ve starem Nette, ale ve 2.0b helper kazdopadne staticka funcke byt nemusi. Pak pomoci DI neni problem vstriknout, co potrebujes.
Osobne pouzivam na obecne helpery vlastni tridu Helpers, kterou
registruju jako sluzbu konteineru + pokud vyjimecne potrebuju pristup do DB nebo
neco specifictejsiho, tak helper dam do tridy prislusneho modelu.

- bojovyletoun
 - Člen | 668
 
No helpery by podle měly bát statické a přenostitelné, to by mě
zajímalo, co takovýhle helper dělá.
Možná jsem napsal blbost,… co když si vemu takové texy,… co ostatní
na to?

- Tomáš Votruba
 - Moderator | 1114
 
gmvasek napsal(a):
Helpery se dají registrovat i jako closury a tam se k presenteru dostaneš, tzn. třeba
$_this = $this; $this->template->registerHelper(function($text) use($_this) { return $_this->context->...; });
Výborně, díky. Jedno či druhé mi funguje, nešlo by to ještě nějak spojit? Tedy předat config sem?
$_this = $this;
$template->registerHelper("helperName", callback("myPresenter", "helperFunction"));
// ...
public static function helperFunction($string) {
	$_this->... // sem!
}
				
- Filip Procházka
 - Moderator | 4668
 
Vytvoříš si třídu
class MyHelpers extends Nette\Object
{
	private $context;
	public function __construct($context)
	{
		$this->context = $context;
	}
	public function loader($helper)
	{
		if (method_exists($this, $helper)) {
			return callback($this, $helper);
		}
	}
	public function helperName($arg)
	{
		return $this->context->model->fce($arg);
	}
}
zaregistruješ
$helpers = new MyHelpers($this->getContext());
$template->registerHelperLoader(array($helpers, 'loader'));
používáš
{$var|helperName}
					Editoval HosipLan (24. 12. 2011 15:09)