Jak správně a bezpečně podstrčit komponentě htmlData z presenteru a zobrazit htmlData v šabloně komponenty
- vosy
- Člen | 532
v presenteru mám
protected function createComponentConfirmFormDialog()
{
$latte = new Engine();
$latte->setTempDirectory(__DIR__.'/../../../temp/');
$params = ['email'=>'zkouska@seznam.cz'];
$htmlConfirmDialog = $latte->renderToString(__DIR__.'/templates/Emaily/sections/confirmDialog_smazatEmail.latte', $params);
$onConfirmFce = function():void{
//nějaká FCE
};
return $this->confirmFormDialogControl->create($onConfirmFce, $htmlConfirmDialog);
}
a v komponentě mám
class ConfirmFormDialogControl extends Control
{
...
...
public function render()
{
$this->template->setFile(self::TEMPLATE);
$this->template->customHtml = $this->htmlConfirmDialog;
$this->template->render();
}
...
}
interface IConfirmFormDialogControl
{
public function create( $onConfirmFce, $htmlConfirmDialog):ConfirmFormDialogControl;
}
a v šabloně komponenty mám
<div class="{App\Constants::PREFIX}-modal">
<div class="dialog">
<div class="header"><a href="">X</a></div>
<div class="content">NĚJAKÝ OBSAH</div>
{$customHtml|noescape}
<div class="controlPanel">{control confirmForm}</div>
</div>
</div>
Chci ze septat, je
{$customHtml|noescape}
dosti bezpečné nebo bych tuto situaci měl řešit jinak?
- Marek Bartoš
- Nette Blogger | 1280
Vyrenderované Latte je už escapované, takže pokud jej používáš ve stejném kontextu (nemáš např. Latte vyrenderované v kontextu HTML a vypisuješ jej v kontextu javascriptu), tak je to bezpečné.
Jen bych string s html hned po renderu obalil do instance Nette\Utils\Html a předával komponentě ten. Ať při vykreslení do šablony nemusíš myslet na noescape.
- Marek Bartoš
- Nette Blogger | 1280
__DIR__.'/../../../temp/'
Místo tohoto si do služby předávavej parametr %tempDir%
.
Aplikace se ti nerozbije, když se ti změní struktura složek.
I presenter můžeš registrovat manuálně do služeb
services:
- App\ExamplePresenter(%tempDir%)
final class ExamplePresenter extends ...
{
public function __construct(string $tempDir)
{
// ...
}
}
Editoval Marek Bartoš (17. 10. 2022 23:06)
- Marek Bartoš
- Nette Blogger | 1280
A než renderovat do stringu, tak si raději udělej komponentu s handle metodou pro smazání a volej v ní callback předaný přes konstruktor. V callbacku záznam smažeš. Může tak být komponenta pro mazání schovaná uvnitř komponenty namísto toho, abys to řešil v presenteru
Editoval Marek Bartoš (17. 10. 2022 23:09)
- vosy
- Člen | 532
Marek Bartoš napsal(a):
A než renderovat do stringu, tak si raději udělej komponentu s handle metodou pro smazání a volej v ní callback předaný přes konstruktor. V callbacku záznam smažeš. Může tak být komponenta pro mazání schovaná uvnitř komponenty namísto toho, abys to řešil v presenteru
@MarekBartoš
Ahoj,
díky, to zní zajímavě.
Jak by ten handle a callback měl vypadat?
Děkuju
Editoval vosy (18. 10. 2022 14:17)