Php symfony验证另一个字段是否为特定值

Php symfony验证另一个字段是否为特定值,php,validation,symfony,Php,Validation,Symfony,如果另一个字段(3)是选项“a”,我试图为字段(1)编写一个验证,如果3是选项“b”,则为另一个字段(2)编写一个验证。我该怎么做呢 编辑: 它是一个实体。我将发布一个我正在尝试的示例 /** *@Assert\Collection( *fields = { aName = @Assert\NotBlank(), * aAmount = @Assert\NotBlank() } */ protected $1; /** *@Assert\Collection( *field

如果另一个字段(3)是选项“a”,我试图为字段(1)编写一个验证,如果3是选项“b”,则为另一个字段(2)编写一个验证。我该怎么做呢

编辑: 它是一个实体。我将发布一个我正在尝试的示例

/**
*@Assert\Collection(
*fields = { aName = @Assert\NotBlank(),
*           aAmount = @Assert\NotBlank() }
*/
protected $1;

/**
*@Assert\Collection(
*fields = { bName = @Assert\NotBlank(),
*           bAmount = @Assert\NotBlank() }
*/
protected $2;

/**
*@Assert\NotBlank()
*/
protected $3;

如果$3='a',我需要$1,如果$3='b',我需要$2。

您可以尝试使用回调约束:

您可以使用验证约束:

例如:

/**
* @Assert\Expression(
 *     "not (this.getThird() == 'a' and this.getFirst() == null)",
 *     message="If third = 'a', first should be not null"
 * )
 */
protected $first;

/**
 * @Assert\Expression(
 *     "not (this.getThird() == 'b' and this.getSecond() == null)",
 *     message="If third = 'b', second should be not null"
 * )
 */
protected $second;

protected $third;

public function getFirst()
{
     return $this->first;   
}

public function getSecond()
{
     return $this->second;   
}

public function getThird()
{
     return $this->third;   
}

您使用什么类型的验证?也许你可以展示你的代码这真的取决于很多因素,需要更多的信息。例如,这纯粹是为了形式吗?它是实体的吗?字段是否来自同一实体?你能提供更多的信息吗?