你必须在 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';
}
我正在阅读 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';
}