forms icon indicating copy to clipboard operation
forms copied to clipboard

Typed property $value must not be accessed before initialization

Open Lumeriol opened this issue 3 years ago • 0 comments

Version: 4.0.x-dev

Bug Description

There is a rare occurence of not initialized value of form component. I have this problem with used Contributte/FormMultiplier. When I use multiplier for component UploadControl, with created (or removed) new field, error is appeared (Typed property Nette\Forms\Controls\BaseControl::$value must not be accessed before initialization).

Problematic code is $obj->$name = $control->getValue() (Forms\Container.php:160), because value is unset. Other form components like TextInput, hidden fields, etc. are okay due having empty string or similar value, only Upload has this problem. I tried to set various default values or disable required of this field, but error persist.

With Nette Forms 3.1 there is no problem because $value is not typed.

Note for the end :) I know that FormMultiplier is not prepared for Nette 4 yet, but this maybe should not be problem of this library?

Steps To Reproduce

$multiplier = $form->addMultiplier('m_photo', function (Container $container, Form $form) {
            $container->addUpload('image')
                    ->addRule(Form::IMAGE, 'Fotogragie musí být JPEG, PNG, WebP nebo GIF.')
        }, 1, 10);

Possible Solution

Set default value to var $value in BaseControl

protected mixed $value = null;

Lumeriol avatar May 20 '22 10:05 Lumeriol