Filtr padLeft nefunguje při použití přes renderToString()
- horakmar
- Člen | 16
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
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
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
@horakmar https://doc.nette.org/…dependencies prostě místo třídy napíšeš interface v typehintu konstruktoru (nebo inject metody nebo inject property).