f3l1x

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

nette dependency injection

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.

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.

image

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.

esc

Type to search. ↑ ↓ to move, ↵ to open.