path do složky app z latte šablony
- mimacala
- Člen | 113
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}
- Marek Bartoš
- Nette Blogger | 1280
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 | 873
@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)