Nette: napovídání nad template v presenteru nebo controlu

19.10.2018
1 min read
201 words

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.

Nette Control
Nette Control

Až po dopsání jsem si všiml, že David vydal podobný článek.


Jak řešíte napovídání u templates? Podělte se do diskuze.

Currently working

I am currently digging deeper to serverless stuf. Also trying to do my best around Nette [contributte.org & componette.org]. Taking care of 242 libraries across various Github organizations.