Filtr padLeft nefunguje při použití přes renderToString()

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

Ahoj.
Ať dělám, co dělám, tak mi nefunguje Latte filtr padLeft, pokud vykresluji šablonu ručně.

Mám takovouto šablonu:

<?php
...
=========================
Clear:  {$data['tp_clear']} ({$data['tm_clear']})
Check:  {$data['tp_check']} ({$data['tm_check']})
Start:  {$data['tp_start']} ({$data['tm_start']})
-------------------------
{foreach $punches as $punch}
{* works *}
{sprintf("%3s (%3d) ... %s", 'K' . $iterator->counter, $punch['cpcode'], $punch['cptimestr'])}

{* does not work *}
K{$iterator->counter |padleft:2} ({$punch['cpcode'] |padLeft:3}) ... {$punch['cptimestr']}

{/foreach}
-------------------------
Finish: {$data['tp_finish']}
=========================
?>

Zpracovávám jí tímto kódem:

<?php
    ...
	$printer_out = $latte->renderToString('../app/templates/Reader/print.latte', $params);
	$display_out = $latte->renderToString('../app/templates/Reader/display.latte', $params);
	$this->sendResponse(new JsonResponse(['printer_out' => $printer_out, 'display_out' => $display_out]));
    ...
?>

Dostávám tuto chybu:
LogicException: Filter ‚padLeft‘ is not defined. in /var/www/html/gorgon/vendor/latte/latte/src/Latte/Engine.php:300

Přitom jiná makra (např. repeat) normálně fungují.
Stejně tak padLeft funguje, když je použito v „normální stránce“, tedy ne přes renderToString().

Je chyba u mě, nebo někde v Latte/Nette?

Díky za info,
Martin

David Matějka
Moderator | 6445
+
+2
-

padLeft a dalsi fitlry pridava az template factory z application .. takze bud si vytvor sablonu pomoci teto tovarny (respektive si vyzadej tenhle iface https://api.nette.org/…Factory.html). tohle ale nevytvari Latte\Engine, ale Template, kterou znas z presenteru

.. a nebo ten filtr registruj rucne

horakmar
Člen | 16
+
0
-

David Matějka napsal(a):

padLeft a dalsi fitlry pridava az template factory z application .. takze bud si vytvor sablonu pomoci teto tovarny (respektive si vyzadej tenhle iface https://api.nette.org/…Factory.html). tohle ale nevytvari Latte\Engine, ale Template, kterou znas z presenteru

.. a nebo ten filtr registruj rucne

Děkuji za odpověď. Ještě prosím, pokud je to možné, jen nějaký příkládek jak si „vyžádat iface“. :-) Díky.

CZechBoY
Člen | 3608
+
0
-

@horakmar https://doc.nette.org/…dependencies prostě místo třídy napíšeš interface v typehintu konstruktoru (nebo inject metody nebo inject property).