Přidávání filtrů v komponentě a ITemplate->addFilter() a statická analýza (PHPStan, IDE)
- fordo.pytlik
- Člen | 26
Ahoj,
poslední dobou jsem téměř „posedlý“ statickou analýzou a nástroji jako je PHPStan. Ale setkal jsem se s chybou, kterou nevím, jak vyřešit. Mám presenter:
<?php
class FooPresenter extends BasePresenter
{
public function beforeRender()
{
$this->template->addFilter('bar', function() { /*...*/ } );
}
// ...
}
?>
V „běžném provozu“ – tento zápis normálně funguje. Filter
bar
se zaregistruje a funguje to úplně v pohodě. Ale při
bližším zkoumání je vidět, že proměnná $this->template
je definovaná jako Nette\Application\UI\ITemplate
a ITemplate
žádnou metodu addFilter()
nemá.
Z praxe samozřejmě vím, že v $this->template
je
Nette\Bridges\ApplicationLatte\Template
, který metodu
addFilter
má.
Takže jak z toho ven? A tím nemyslím, jak jen jak „ochcat“ PHPStan,
aby prošel, ale přijde mi zvláštní, když komponenta
tvrdí, že v $template bude ITemplate
tak volat fci, která
ITemplate
nemá. Líbí se mi právě ta jistota, že tam daná
fce je.
Nebo je to hloupost a nikdy jste nic podobného neřešili?
- Jan Tvrdík
- Nette guru | 2595
@CZechBoY Což můžeš pragmaticky zkrátit na
assert($this->template instanceof Nette\Bridges\ApplicationLatte\Template)
(rozumí tomu PhpStorm i PHPStan).