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 | 667
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)