Php Symfony表单约束连接字段
我对约束有疑问 我有多个复选框的实体(布尔类型) 现在我需要一些非标准逻辑,比如:Php Symfony表单约束连接字段,php,symfony,Php,Symfony,我对约束有疑问 我有多个复选框的实体(布尔类型) 现在我需要一些非标准逻辑,比如: 如果选中复选框A,则必须同时选中复选框B 如果选中了复选框A、B、C,则必须也选中复选框D 现在的问题是: 我是否能够在约束条件下做出这样的逻辑(如果是-如果有人能提供示例,那就太好了)?或者唯一的方法是将此逻辑移动到控制器?我认为最简单的解决方案是使用: 比如: <?php namespace App\Entity; use Symfony\Component\Validator\Constra
- 如果选中复选框A,则必须同时选中复选框B
- 如果选中了复选框A、B、C,则必须也选中复选框D
我是否能够在约束条件下做出这样的逻辑(如果是-如果有人能提供示例,那就太好了)?或者唯一的方法是将此逻辑移动到控制器?我认为最简单的解决方案是使用: 比如:
<?php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
class Entity
{
private $checkbox_a = false;
private $checkbox_b = false;
private $checkbox_c = false;
private $checkbox_d = false;
/**
* @Assert\Callback
*
* @param ExecutionContextInterface $context
* @param mixed $payload
*/
public function validate(ExecutionContextInterface $context, $payload)
{
if ($this->checkbox_a && !$this->checkbox_b) {
$context->buildViolation('Must be checked because of checkbox_a!')
->atPath('checkbox_b')
->addViolation();
}
if ($this->checkbox_a && $this->checkbox_b && $this->checkbox_c && !$this->checkbox_d) {
$context->buildViolation('Must be checked because of all others are checked!')
->atPath('checkbox_d')
->addViolation();
}
}
}
由于您的逻辑是特定的,您必须执行一些特定的代码来验证它
Symfony为您提供了3种工具:
这是一个定制的php函数(参见@Yoshi answer's)
这是已解析的自定义表达式。例如:
/**
* @Assert\Expression(
* "'1' in this.getCheckboxValues() and !('3' in this.getCheckboxValues())",
* )
*/
还是你自己的