path do složky app z latte šablony

mimacala
Člen | 113
+
0
-

Ahojte, nedaří se mi vložit adresu souboru do šablony latte.

Mám tento kód který generuje QR, zde vše funguje ve složce presenters/users/emailuživatele/qrkody vytvoří kód.

$qrCode = $this->qr = (new QrCode($url->shorturl))
                    ->setSize(250)
                    ->setMargin(5);
                $qrCode->writeFile(__DIR__.'users/'.$this->user->getIdentity()->email.'/'.$url->id.'.webp');

Ovše když chci zobrazit kódy v šabloně latte a tady mi nastává obtíž s cestou k souboru.
$basepath mi udává cestu k www, ale já potebuji cestu do presenteru :/
Tuší někdo jak na to ?
Moc děkuji

{foreach $urls as $url}
<tr>
	<th scope="row">{$url->longurl}</th>
	<td>{$url->shorturl}</td>
<td><a n:href="remove!,$url->id">
<img src="{$basePath}/user/{$user->getIdentity()->email}/{$url->id}.webp"></img>
</a></td>

</tr>
{/foreach}
mystik
Člen | 292
+
+2
-

Z bezpecnostnich duvodu je obvykle verejne dostupna jen slozka www. Dostat se mimo ni by nemelo byt mozne pokud nemas spatne nastaveny hosting.

Reseni je ten obrazek ulozit nekde ve www nebo ho generovat v nejake akci presenteru a poslat jako response.

Marek Bartoš
Nette Blogger | 1177
+
+1
-

Pokud je to dočasný soubor, který zpracuješ v rámci téhož requestu, tak si můžeš udělat virtuální filesystem v paměti https://github.com/orisai/vfs

Ale hádám, že spíš hledáš způsob, jak si cestu k www složce (nebo jiné, interní složce pro data) předat do presenteru https://blog.nette.org/…anym-sluzbam
Nepoužívej aktuální složku jako umístění, když k ní pak potřebuješ přistupovat z jiných míst. Použij nějaký vyhrazený adresář pro data a ideálně si pro čtení a zápis udělej službu, namísto skládání url na více místech :)

m.brecher
Generous Backer | 763
+
+1
-

@mimacala

Ahoj,

QR code není typ trvalého webového obsahu jako jsou třeba fotografie, ale jsou to data ve formátu pro čtení kamerou mobilního telefonu/čtečkou, apod… Takže stejně jako si na disk na serveru neukládáme výpisy dat z databáze, ale rovnou je vypíšeme do html, tak ani obrázky QR kódů (zakódovaná databázová data) nemá cenu ukládat na disk, ale rovnou vypsat do html. Je na to určený speciální formát base64 ;).

Příklad kódu:

šablona latte:

<img class="qr-image" src="data:image/png;base64,{$qrcode}">

presenter:

action renderSomething(){
    $this->template->qrcode = $this->someModel->getQrcodeString()
}

model:

public function getQrcodeString(): string
{
    return base64_encode($this->getQrCodeImage())
}

Ukládat QR kódy na disk tak můžeš úplně vynechat. Odpadnou problémy při případných editačních změnách apod…

Editoval m.brecher (20. 6. 2023 18:25)

mimacala
Člen | 113
+
0
-

No jistě to je pravda.
V tabulce si tedy jen hodím na foreach výpis z databáze a nemusím řešit uživatelské složky a soubory.
Moc děkuji za pomoc. +1