Latte 3: Lze ovlivnit pořadí registrace extension v config.neon?
- Kajda23
- Člen | 42
Ahoj,
vytvořil jsem si extension, které přepisuje jeden z formulářových tagů.
Problém je, že pokud mojí extensionu registruji v configu (latte:
extensions: – MojeExtenšna), je zaregistrována před formulářovou
extensionou a tudíž jí nepřepíše. Lze pořadí registrace nějak ovlivnit
nebo nějak jinak dostat mojí verzi tagu místo standardní?
Editoval Kajda23 (24. 10. 2022 10:34)
- Marek Bartoš
- Nette Blogger | 1275
Tak jak píšeš to teď opravdu nejde. Latte DI extension registruje Latte extensions při vytváření Engine přes LatteFactory, zatímco FormsExtension se registruje až následně v TemplateFactory https://github.com/…eFactory.php#…
Můžeš řešit tak, že svoji extension zaregistruješ pomocí události TemplateFactory::$onCreate(), aby registrace tvé proběhla až po registraci původní.
- David Grudl
- Nette Core | 8228
Asi by se to dalo řešit přidáním volby after
, kde by se
uvedlo, za jakou extension se má přidávaná zařadit…
Editoval David Grudl (24. 10. 2022 14:03)
- petr.pavel
- Člen | 535
Nebo v addExtension() nepřidávat tu samou extension podruhé. Pak by šlo v configu Nette\Bridges\FormsLatte\FormsExtension uvést před mou extension a tím ovlivnit pořadí načítání.
Editoval petr.pavel (4. 4. 17:26)
- petr.pavel
- Člen | 535
Ještě přidám hotový příklad pro ten postup s onCreate:
common.neon
services:
latte.templateFactory:
setup:
- '$onCreate[]' = [App\Bridges\Latte\LatteExtension, onTemplateCreate] # a workaround to override FormsExtension::label
declare(strict_types=1);
namespace App\Bridges\Latte;
use Nette\Bridges\ApplicationLatte\DefaultTemplate;
class LatteExtension extends \Latte\Extension
{
public function getTags(): array
{
return [
'label' => [Nodes\LabelNode::class, 'create'],
];
}
public static function onTemplateCreate(DefaultTemplate $template): void
{
$template->getLatte()->addExtension(new static);
}
}
- David Grudl
- Nette Core | 8228
Upravím kód tak, aby se nejdříve přidaly CacheExtension a FormsExtension, a teprve poté uživatelské extensions.
UIExtension je vázané na $control, ale to by se dalo řešit úpravou
LatteFactory, aby $control
přijímala jako parametr.
Můžete to otestovat v 3.2-dev