-
-
Notifications
You must be signed in to change notification settings - Fork 151
Open
Description
I have a custom form control implementing Nette\Forms\Control interface.
I want to add a common rule to check if that control is filled. Sadly, the default implementation delegates to the static Validator class that requires a BaseControl subtype.
Line 162 in fcfc86c
| public static function validateFilled(Controls\BaseControl $control): bool |
I worked around this by providing custom rules that override the filled check:
class CustomControlRules extends Rules
{
public static function validateRule(Rule $rule): bool
{
if ($rule->validator === Form::Filled) {
$control = $rule->control;
if (!$control instanceof \MyCustomImplementation) {
throw new InvalidStateException();
}
return $control->isFilled();
} else {
return parent::validateRule($rule);
}
}
}But, this is getting forbidden by the recent (Forms 3.2) changes that are making the Rules class final.
The simple solution is to remove the final once again, but since I got to report this, I'd ask you to consider some proper LSP solution -> ideally moving the required methods to the interface.
Metadata
Metadata
Assignees
Labels
No labels