你必须在 symfony 中注册你的自定义验证器吗

Do you have to register your custom validators in symfony

我正在阅读 the documentation on making custom validators,它没有说明您必须注册自定义创建的验证器,但还有什么会导致此问题?

我创建了一个自定义约束:

namespace Lib\Validators\UniqueValidator\Constraint;

use Symfony\Component\Validator\Constraint;

/**
 * @Annotation
 */
class Email extends Constraint {

  public $message = "The email entered already exists.";
}

和自定义验证器:

namespace Lib\Validators\UniqueValidator;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class EmailValidator extends ConstraintValidator {

  public function validate($value, Constraint $constraint) {
    var_dump($value, $constraint); exit;
  }
}

然后当我去使用它时:

The annotation "@\Lib\Validators\UniqueValidator\Constraint\Email" in property  > ImageUploader\Models\User::$email does not exist, or could not be auto-loaded.

而且我不确定为什么。有我看不到的拼写错误吗?我检查了所有内容 50 次。

在我的 bootstrap.php 我有:

$loader = require 'vendor/autoload.php';
\Doctrine\Common\Annotations\AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

但是那些是针对 symfony 验证器的,我是否必须为我的自定义验证器做类似的事情?我还应该提到我正在使用 the symfony validators component 而不是全栈 symfony.

对于我做过的目录结构的查看:

\Lib指向lib/的基数。我确定这不是标准的,很快就会修复。

您的自定义验证器必须与您的约束位于同一文件夹中。根据你的命名空间,不是这样的。

如果你想把它们分开,你可以覆盖Constraint class 的validatedBy() 方法:

public function validatedBy()
{
    return get_class($this).'Validator';
}