Registrace latte filtru do config.neon – jak definuju název filtru (za | v makru) a jak posílat správný string
- simPod
- Člen | 383
Slepil jsem nějaké code snippety, co jsem našel tady na fóru; Zaregistroval jsem si filter do config.neon
services:
texyFilter: MyNS\TexyFilter
nette.latteFactory:
setup:
- addFilter(null, [@texyFilter, process])
Když pak v šabloně udělám toto {$var|texy}
, tak se mi do
TexyFilter
do metody process()
pošle string
texy
.
Zajímalo by mě, na základě čeho to ví, že když napíšu
|texy
tak to má zvolit zorvna @texyFilter
. Jak bych
si třeba |texy
mohl změnit na |filterMe
?
A pak další věc je, proč se mi do callback metody process()
posílá string texy
a ne hodnota $var
Díky!
- Etch
- Člen | 403
Což je očekávané chování, protože si to „slepil“ špatně.
nette.latteFactory:
setup:
- addFilter(null, [@texyFilter, process])
Takhle se registruje většinou nějakej loader a s tím i souvisí, že dostáváš string „texy“. „Process“ metoda není loader a proto by si daný filter měl zaregistrovat následovně:
nette.latteFactory:
setup:
- addFilter('filterMe', [@texyFilter, process])
Všechny ostatní otázky souvisí se špatným zaregistrováním filteru. Pro doplnění uvedu ukázku primitivního loaderu:
class Helpers{
public function loader(){
$arguments = func_get_args();
$method = $arguments[0];
array_shift($arguments);
if(method_exists($this, $method)){
return call_user_func_array(array($this, $method), $arguments);
}else{
return null;
}
}
public function test(){
return 'filter test';
}
}
- ali
- Člen | 342
Osobne texy filtr mam zaveden takto pres loader, coz taky doporucuji, muzes si pak jednoduse pridavat dalsi filtry:
services:
nette.latteFactory:
setup:
- addFilter(null,[App\Filters(),loader])
namespace App;
use Nette\Object,
Nette\Utils\Html,
Texy;
class Filters extends Object
{
/**
* loader
* @param filtr name
* @return mixed
*/
public static function loader($filter)
{
return (method_exists(__CLASS__,$filter) ? call_user_func_array([__CLASS__,$filter],array_slice(func_get_args(),1)) : null);
}
/**
* texy
* @param string
* @return Nette\Utils\Html
*/
public static function texy($s)
{
$texy = new Texy();
$texy->encoding = "UTF-8";
$texy->setOutputMode(Texy::HTML5);
...
...
...
return Html::el()->setHtml($texy->process($s));
}
}
Editoval ali (3. 1. 2015 12:04)