Latte addFilter a PHPStan level = 2

- motorcb
 - Člen | 552
 
Ahoj,
pokouším se zvednou PHPStan na level 2. Končím ale na
následujícíc chybě:
 ------ --------------------------------------------------------------------------
  Line   app\Components\UserDetail\UserDetail.php
 ------ --------------------------------------------------------------------------
  41     Cannot call method getLatte() on Nette\Application\UI\Template|stdClass.
 ------ --------------------------------------------------------------------------
Jedná se o komponentu, kde používá latte filter:
	public function render()
	{
		$latte = $this->template->getLatte();
		$latte->addFilter('anonimize', function (string $text) {
			return "xxx";//loginka filtru
		});
		$this->template->setFile(__DIR__ . '/UserDetail.latte');
		$this->template->userRow = $this->userRow;
		$this->template->render();
	}
Jak to děláte vy aby byl PHPStan spokojený?
Díky

- kminekmatej
 - Generous Backer | 39
 
Také jsem to řešil, problém je že template je v parentu definován jako Nette\Application\UI\Template|stdClass. Stačí před to dát Asserci na správnou classu:
assert($this->template instanceof \Nette\Bridges\ApplicationLatte\Template);
				
- Marek Bartoš
 - Nette Blogger | 1313
 
Je zbytečné psát všude assert, když nejspíš vždy budeš používat Latte. Stačí do base presenteru přidat anotaci
use Nette\Application\UI\Presenter;
use Nette\Bridges\ApplicationLatte\Template;
use Nette\Bridges\ApplicationLatte\TemplateFactory;
/**
 * @property-read Template $template
 * @method TemplateFactory getTemplateFactory()
 * @method Template createTemplate()
 * @method Template getTemplate()
 */
abstract class BasePresenter extends Presenter {}
					Editoval Marek Bartoš (30. 12. 2023 15:02)

- Marek Bartoš
 - Nette Blogger | 1313
 
Pokud chceš mít přehled o nových chybách a vidět ty existující, tak
je fajn nastavit PHPStan na level 8 (maximální level 9 je většinou
nereálné splnit) a vygenerovat si baseline
s přehledem existujících chyb.
Nikdy nevyřešíš všechny chyby. Kupříkladu u Nette formulářů je to
zbytečně komplikované a nedostal by ses tak na vyšší level.