Утверждение \ Выражение дает переменную, не действительную вокруг позиции 2 - PullRequest
0 голосов
/ 18 января 2019

У меня есть форма. Я пытаюсь утверждать, что если одно поле не является нулевым, то другое поле также не должно быть нулевым. Попытка сделать это с помощью аннотаций Symfony, так как я не хочу, чтобы код находился в контроллере, и мне сказали, что это будет хорошим способом сделать это.

Я пытался использовать Assert \ Expression, однако я получаю различные ошибки в поле, которое проверяю. Это немного относится к тому, что он говорит Variable, когда мне нужно, чтобы он ссылался на поле.

                // The field that I want to check if it is null
                'activeTestData',
                null,
                [
                    'label' => 'form.label.active_test_data',
                    'required' => false,
                ]
            )
            ->add(
                // The field that can't be null if the activeTestData field is not null
                'activeTestDataUnit',
                ChoiceType::class,
                [
                    'label' => 'form.label.active_test_data_unit',
                    'required' => false,
                    'choices' => [
                        'form.label.active_test_please_select' => '',
                        'Byte(s)' => 'b',
                        'Kilobyte(s)' => 'k',
                        'Megabyte(s)' => 'm',
                        'Gigabyte(s)' => 'g',
                    ],
                    // Where I am having the issue
                    'constraints' => [
                        new Assert\Expression([
                           'expression' => "!activeTestData == null",
                            'message' => 'Please enter a unit for active test data'
                        ]),
                    ],

Мне нужна ошибка ФОРМЫ, когда в activeTestDataUnit ничего нет, а в activeTestData что-то есть. К сожалению, я получаю ошибку Symfony: Variable "activeTestData" is not valid around position 2 for expression !activeTestData == null.

1 Ответ

0 голосов
/ 23 января 2019

Правильный синтаксис для этой ситуации будет следующим: "!this.getParent().get('activeTestData')->getData() == null"

Вы можете увидеть больше примеров и подробностей в документации symfony .

Я обновил свой ответ. В этом контексте «this» является объектом Form поля «activeTestDataUnit». Поэтому, чтобы проверить значение «activeTestData», нужно перейти к родителю, а затем получить правильного потомка.

Начиная с Symfony 4.1 вы можете передавать свои пользовательские значения в аргумент «values» и избегать всего этого беспорядка, передавая $builder->getData(). Более подробную информацию о документации Symfony см. Здесь

...