LinkGenerator a persistentní parametr
- n3t
- Člen | 37
Ahoj,
pro generování odkazů v šablonách pro emaily používám LinkGenerator předaný do Latte takto
$template = $this->templateFactory->createTemplate();
$template->getLatte()->addProvider('uiControl', $this->linkGenerator);
$template->getLatte()->renderToString('email.latte', $params);
Lze nějak tomu LinkGenerator podstrčit „persistentní parametry“, tj.
aby se přidaly do každého linku? (konkrétně mi jde o locale)
Něco ve smyslu
$this->linkGenerator->setPersistantParams(['locale' => $this->locale]);
Nebo musím ty parametry zapsat přímo v Latte? Popř. je nějaký jiný elegantnější způsob (vlastní LinkGenerator asi)?
Díky
- Martk
- Člen | 661
Stačilo by udělat něco podobného, když se jedná jen o latte:
class LinkGeneratorWithPersistentParams {
__construct(private LinkGenerator $linkGenerator, private array $persistentParams)
link($dest, $params) {
return $this->linkGenerator->link($dest, $params + $persistentParams);
}
}
a create:
interface LinkGeneratorWithPersistentParamsFactory {
create(array $persistentParams): LinkGeneratorWithPersistentParams;
}
- n3t
- Člen | 37
Dík za tipy, nevěděl jsem že ten LinkGenerator předaný do Latte nemusí
být LinkGenerator :)
Vyřešil jsem tedy takto (možná to někomu v budoucnu pomůže)
namespace App\System;
class MailLinkGenerator
{
private $linkGenerator;
private $persistentParams;
public function __construct(\Nette\Application\LinkGenerator $linkGenerator, array $persistentParams)
{
$this->linkGenerator = $linkGenerator;
$this->persistentParams = $persistentParams;
}
public function link(string $dest, array $params = []): string
{
return $this->linkGenerator->link($dest, $params + $this->persistentParams);
}
}
interface MailLinkGeneratorFactory
{
/** @return MailLinkGenerator */
function create(array $persistentParams);
}
v configu
services:
- App\System\MailLinkGeneratorFactory
A volání pak takto (Factory je předaná konstruktorem)
$template->getLatte()->addProvider('uiControl', $this->linkGeneratorFactory->create([
'locale' => $this->translator->getLocale(),
]));
PS: jestli tam mám něco špatně dejte vědět :), ale funguje to