在方法参数中使用 Symfony 验证器

Use Symfony validator in Method arguments

有没有办法将 Symfony 验证器约束应用于方法的参数?

像这样:

use Symfony\Component\Validator\Constraints as Assert;

class acmeClass
{
  /**
  * @param $argument
  * @Assert\Choice({"YES", "NO"})
  */
  public funciton foo($argument) 
  {
    /..  
  }
}

所以如果 $argument 的值与给定的选择不同,验证会抛出异常?

很遗憾,Symfony 框架不支持此功能。

您有 2 个选择:

1).调用前验证 foo():

$errors = $validator->validate($argument, $constraint);
if (count($errors) > 0) {
    //throw some exception?
}

$acmeClassObj->foo($argument);

2).在 foo() 本身内部验证:

class acmeClass
{
    public function foo($argument)
    {
        $errors = $validator->validate($argument, $constraint);
        if (count($errors) > 0) {
            //throw some exception?
        }

        //do something here with $argument
    }
}

老实说,我认为 Symfony 不支持这个更好。程序员在阅读代码时通常会忽略注解和注释,而且它们通常会过时,导致代码更难调试。