Assert \ Expression在位置2附近给出变量无效

时间:2019-01-18 11:44:39

标签: forms symfony field assert

我有一个表格。我试图断言,如果一个字段不为空,那么另一个字段也不能为空。尝试使用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中有东西时,我想要一个FORM错误。不幸的是我遇到了symfony错误: Variable "activeTestData" is not valid around position 2 for expression !activeTestData == null

1 个答案:

答案 0 :(得分:0)

这种情况的正确语法如下: database.GetCollection<Movie>("Movies") .Aggregate() .Unwind<Movie>(x => x.Genres) .Group(x=>x.Genres, g => new { Genre= g.Key, Count = g.Select(x=>x.Genres).Count() }).ToList();

您可以在symfony documentation上查看更多示例和详细信息。

我更新了答案。在这种情况下,“ this”是“ activeTestDataUnit”字段的Form对象。因此,要检查“ activeTestData”值,您需要转到父项,然后获得一个正确的子项。

从Symfony 4.1开始,您可以通过传递"!this.getParent().get('activeTestData')->getData() == null"来将自定义值传递给“ values”参数,并避免所有此类混乱情况。有关symfony documentation

的更多信息,请参见此处