Jak na napovídání nad objektem template
v presenteru nebo controlu?
Každý Nette vývojář se již setkal s proměnnou $template
v presenterech nebo controlech. Data do šablony vkládáme sami, ale objekt template obsahuje pár předdefinovaných properties. Ty se tam dostanou z TemplateFactory.
No jo, ale PHPStorm nám žadné klíče, kromě definovaných interfacem ITemplate
, nenapovídá. Jak toho tedy docílit?
TemplateProperty
Vytvořme třídu TemplateProperty
, která bude obsahovat pouze anotace a budě dědit od Nette\Bridges\ApplicationLatte\Template
.
<?php declare(strict_types = 1);
namespace App\Model\Latte;
use App\UI\BasePresenter;
use App\UI\Control\BaseControl;
use Nette\Bridges\ApplicationLatte\Template;
use Nette\Security\User;
/**
* @property-read User $user
* @property-read BasePresenter $presenter
* @property-read BaseControl $control
* @property-read string $baseUri
* @property-read string $basePath
* @property-read array $flashes
*/
final class TemplateProperty extends Template
{
}
Base{Control, Presenter}
V našem BaseControl
a BasePresenter
definujme phpdoc @property-read
.
<?php declare(strict_types = 1);
namespace App\UI\Control;
use App\Model\Latte\TemplateProperty;
/**
* @property-read TemplateProperty $template
*/
abstract class BaseControl extends Control
{
}
PHPStorm
Každá třída dědící od BaseControl
nebo BasePresenter
bude nyní PHPStorm správně napovídat.
Related
Až po dopsání jsem si všiml, že David vydal podobný článek.
- https://blog.nette.org/phpstorm-and-code-completion-for-this-template
- https://phpfashion.com/phpstorm-a-napovidani-nad-this-template
Jak řešíte napovídání u templates? Podělte se do diskuze.