Skip to content

OptionsResolver: validate nested array item structure #34207

Closed
@videni

Description

@videni

I have a array like this, I'd like to validate the structure of the operations , can we do this?

[
    'typeName' => 'UserOperation',
    'operations' => [
        [ 
            'operationName' => 'updateUser',
            'resolve' => "@=hasPermission(value, 'acme_user_user_update')",
        ],
        [
            'operationName' => 'user',
            'resolve' => "@=hasPermission(value, 'acme_user_user_view')",
        ],
        [
            'operationName' => 'deleteUser',
            'resolve' => "@=hasPermission(value, 'acme_user_user_delete')",
        ]
     
    ]     
]

I tried this way, it doesn't work.

    $optionResolver = new OptionsResolver();
        $optionResolver
            ->setRequired(['typeName', 'operations'])
            ->setAllowedTypes('typeName', ['string'])
            ->setDefaults([
                'operation' => function (OptionsResolver $operationResolver) {
                    $operationResolver
                        ->setRequired(['operationName', 'resolve'])
                        ->setAllowedTypes('operationName', ['string'])
                        ->setDefaults([
                            'public' => true,
                        ])
                    ;
                },
            ])
            ->setAllowedTypes('operations', 'operation[]' )
            ->setNormalizer(
                'operations',
                function (Options $options, $operations) {
                    if (length($operations) > 0) {
                        throw new InvalidConfigurationException('The option "$operations" must not be empty.');
                    }

                    return $operations;
                }
            )
        ;

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions