Registrace latte filtru do config.neon – jak definuju název filtru (za | v makru) a jak posílat správný string

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

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

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

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)

simPod
Člen | 383
+
0
-

aha, chapu. diky!

simPod
Člen | 383
+
0
-

to vypadá dobře, jednoduše na používání. Díky

simPod
Člen | 383
+
0
-

Nějakej tip, jak to napojit na:

$latte = new Latte\Engine;
$latte->addFilter(...);

? Díky