我有一个表格。我试图断言,如果一个字段不为空,那么另一个字段也不能为空。尝试使用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
。
答案 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