Version: all (I use 3.1.1, but it is present in master too)
Bug Description
Found by efabrica-team/phpstan-latte#399
BaseControl::getLabel() has return type Html|string|null, but in compiled template ->getLabel())?->startTag() is used, so it always acts like there is Html or null. No string.
Steps To Reproduce
Create some custom Form Control with method getLabel() returning string and use it in form:
protectedfunctioncreateComponentForm(): Form
{
$form = newForm();
$form->addText('title', 'Title');
$customCheckbox = newclassextends Checkbox
{
publicfunctiongetLabel($caption = null)
{
return'this is just string';
}
};
$form->addComponent(new$customCheckbox('Is hidden'), 'is_hidden');
return$form;
}In latte:
{form form}{input title}{label is_hidden}{input is_hidden}{/label}{/form}You will get error Call to a member function startTag() on string
Expected Behavior
No error.
Possible Solution
- Simple: Remove string as possible return type of method getLabel() (BC break? Probably, but does somebody use it?)
- Harder: Change compiled code to check if string is used. But how it will be rendered if it is just string?
Version: all (I use 3.1.1, but it is present in master too)
Bug Description
Found by efabrica-team/phpstan-latte#399
BaseControl::getLabel() has return type Html|string|null, but in compiled template
->getLabel())?->startTag()is used, so it always acts like there isHtmlornull. Nostring.Steps To Reproduce
Create some custom Form Control with method getLabel() returning string and use it in form:
In latte:
You will get error
Call to a member function startTag() on stringExpected Behavior
No error.
Possible Solution