PhpStorm and code completion for $this⁠-⁠>⁠template

8 years ago by David Grudl  

How to activate the code completion for $this->template in presenters in PhpStorm, NetBeans or any other IDE?

In source code of class Control you can find this annotation that describes type of property $this⁠-⁠>⁠template:

/**
 * @property-read Nette\Bridges\ApplicationLatte\Template|\stdClass $template
 */

The stdClass class in the annotation is a workaround for PhpStorm to get rid of alerts on “undefined fields”. The Nette\Bridges\ApplicationLatte\Template is default template's class name.

However, it is more interesting to create a own class with a real list of the variables that the template uses, including their types. It may look like this:

class ArticleTemplate extends Nette\Bridges\ApplicationLatte\Template
{
	/** @var string */
	public $lang;
	/** @var int */
	public $page;
	/** @var string[] */
	public $menu;
	/** @var Model\Page */
	public $article;
}

And then put own class name in the annotation of a specific presenter to be used instead default one:

/**
 * @property-read ArticleTemplate $template
 */
final class ArticlePresenter extends Nette\Application\UI\Presenter

From now on, the code completion is perfect:

Latte plugin now supports suggestions in the templates as well. Just add {templateType App\Presenters\ArticleTemplate} at the beginning of the template.

This post was updated on 2/2020

David Grudl Founder of Uměligence and creator of Nette Framework, the popular PHP framework. Since 2021, he's been fully immersed in artificial intelligence, teaching practical AI applications. He discusses weekly tech developments on Tech Guys with his co-hosts and writes for phpFashion and La Trine. He believes AI isn't science fiction—it's a practical tool for improving life today.