Project

General

Profile

Actions

Bug #100301

closed

Undefined array key for form fields of type checkbox

Added by David Bruchmann about 1 year ago. Updated about 1 year ago.

Status:
Closed
Priority:
Should have
Assignee:
-
Category:
Form Framework
Start date:
2023-03-25
Due date:
% Done:

0%

Estimated time:
TYPO3 Version:
11
PHP Version:
8.0
Tags:
Complexity:
easy
Is Regression:
Sprint Focus:

Description

Defining a form like this

type: Form
prototypeName: standard
identifier: variant-Test
label: Newsletter Subscription
renderables:
  -
    type: Page
    identifier: page-1
    label: General data
    renderables:
      -
        type: Text
        identifier: email-address
        label: Email address
        defaultValue:
        variants:
          -
            identifier: validation-1
            condition: 'formValues["checkbox-1"] == 1'
            properties:
              fluidAdditionalAttributes:
                required: required
            validators:
              -
                identifier: NotEmpty
              -
                identifier: EmailAddress
      -
        type: Checkbox
        identifier: checkbox-1
        label: Check this and email will be mandatory

throws an error when the checkbox is not checked:
PHP Warning: Undefined array key "checkbox-1" in /var/www/html/vendor/symfony/expression-language/Node/GetAttrNode.php line 97

Select fields with empty value option behave probably similar.
I'm not sure if all cases would be covered then.

Actions #1

Updated by Andreas Kienast about 1 year ago

  • Status changed from New to Needs Feedback

This is a general issue in the underlying Symfony Expression Language API. We suffer from the same issue in TypoScript conditions, where traverse() is recommended. Can you please check whether traverse(formValues, "checkbox-1") == true) works for you?

Actions #2

Updated by Holger McCloy about 1 year ago

Hi Andreas,
since you did not yet get any feedback: I had the same issue and your workaround works.
Thanks!

Actions #3

Updated by Christian Kuhn about 1 year ago

  • Status changed from Needs Feedback to Closed

Note for anyone stumbling upon this:

This is not considered a bug, but a limitation / design decision of symfony expression language at this point: Potentially not existing structures need to be sanitized with traverse() (a TYPO3 addition), otherwise it explodes. With objects, the `?` operator can be used as well in TYPO3 v12.

This is similar in TypoScript conditions: TYPO3 v11 catches this with a pretty ugly hack, but TYPO3 v12 lets it explode as well, just like with ext:form form definition conditions.

The "condition" chapter in TypoScript Reference docs has a series of good examples on this, and many of them can be used 1:1 in ext:form form conditions as well.

Actions

Also available in: Atom PDF