Skip to content

Dependent form not using submitted values with more than 1 dependency #14

@faizanakram99

Description

@faizanakram99

First of all, thank you for this awesome library. Awesome work.

I don't have a reproducer, but here is an excerpt from the form type causing issues

foreach (CustomFieldDefinitionEntity::supportedModules() as $module) {

    // this works fine as there is just one dependency 'modules'

    $builder
        ->addDependent($module, 'modules', function (DependentField $field, ?array $modules) use ($module) {
            $insertionPoints = [...];

            $field->add(ChoiceType::class, [
                'choices' => $insertionPoints,
                'disabled' => !\in_array($module, $modules ?? [], true),
                'required' => true,
                'getter' => fn (CustomFieldDefinition $fieldDefinition) => $fieldDefinition->placement[$module] ?? "{$module}.default",
                'setter' => function (CustomFieldDefinition $fieldDefinition, ?string $value) use ($module): void {
                    $fieldDefinition->placement[$module] = StringFunctions::emptyStringToNull($value) ?? "{$module}.default";
                },
            ]);
        })
    ;
}

// this doesn't use submitted values of the child added above 
// (value-of<CustomFieldDefinitionEntity::supportedModules()>), 
// it uses default values (initial form values), 
// the only difference is that this has multiple dependencies 
// unlike above which is just dependent upon a single field.

foreach (CustomFieldDefinitionEntity::ALLOWED_PROPAGATIONS as $propagationSource => $propagationDestinations) {
    $builder
        ->addDependent("propagation_{$propagationSource}", CustomFieldDefinitionEntity::supportedModules(), function (DependentField $field, ...$modules) use ($builder, $propagationDestinations, $propagationSource): void {

            // `$modules` doesn't contain submitted data 

            $field->add(ChoiceType::class, [
                'multiple' => true,
                'choices' => [...],
                'choice_attr' => $choiceAttributes,
                'required' => false,
                'expanded' => true,
                'getter' => fn (CustomFieldDefinition $fieldDefinition) => $fieldDefinition->propagations[$propagationSource] ?? [],
                'setter' => function (
                    CustomFieldDefinition $fieldDefinition,
                    ?array $destinations,
                    FormInterface $form
                ) use ($propagationSource): void {
                    $fieldDefinition->propagations[$propagationSource] = $destinations ?? [];
                },
            ]);
        })
    ;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions