Php Symfony2验证(yml)已忽略
我在bundles Resources/config目录中设置了validation.yml。我在我的config.yml中启用了验证程序的使用:Php Symfony2验证(yml)已忽略,php,validation,symfony,Php,Validation,Symfony,我在bundles Resources/config目录中设置了validation.yml。我在我的config.yml中启用了验证程序的使用: framework: validation: { enabled: true, enable_annotations: false } Resources/config/validation.yml: MyBundle\AppBundle\Handler\SearchModel: properties: search
framework:
validation: { enabled: true, enable_annotations: false }
Resources/config/validation.yml:
MyBundle\AppBundle\Handler\SearchModel:
properties:
search:
- Length:
min: 2
max: 50
minMessage: "Your string must be at least {{ limit }} characters long"
maxMessage: "Your string cannot be longer than {{ limit }} characters long"
在我的控制器中,我正在执行以下操作:
$validator = $this->get('validator');
$errors = $validator->validate($searchModel);
我非常确定(因为我仔细检查过)要验证的模型的属性是string(1)1char。(应至少为2!)
但是$errors的var_dump()表示:
object(Symfony\Component\Validator\ConstraintViolationList)#327 (1) {
["violations":"Symfony\Component\Validator\ConstraintViolationList":private]=>
array(0) {
}
}
因此,不会抛出错误。我怎样才能解决这个问题?我希望验证器工作:)
更新
我(现在)用一种变通方法使它起作用。我向(SearchModel)类添加了一个loadValidatorMetaData方法以进行验证
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata
->addPropertyConstraint(
'search',
new Assert\Length(
array('min' => 2, 'minMessage' => 'Error message.')
)
);
}
检查$validator->validate($searchModel)时;它返回错误,因此验证工作正常。但对于.yml文件则不是这样:(我设置了一个小测试用例,但没有出现错误。我添加了一个NotBlank约束,当搜索为空时出现了一个错误
Acme\DemoBundle\Command\SearchModel:
properties:
search:
- Length:
min: 2
max: 5
minMessage: "Your string must be at least {{ limit }} characters long"
maxMessage: "Your string cannot be longer than {{ limit }} characters long"
- NotBlank: ~
然后我将搜索设置为一个字符
class SearchModel
{
public $search = 'a';
}
它触发了最小长度错误
我通读了长度文档:。确实,长度为零的字符串应该会触发错误
在任何情况下,添加一个NotBlank约束,您就可以开始了
我检查了代码:
namespace Symfony\Component\Validator\Constraints;
class LengthValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
if (null === $value || '' === $value) {
return;
}
因此,我想这就是所谓的未记录的“功能”。字符串长度为零不被认为小于min!请好奇是否有关于此的错误报告。但是,NotBlank也可以。您可以随时调整错误消息,以便用户知道限制。从文档中的示例开始:.Replace's通过使用您的搜索模型的新实例进行测试,可以绝对确定。缓存可能需要清除。并且您的验证文件位于加载到AppKernel中的Symfony 2捆绑包中?感谢您的回答。我重新测试了它,清除了正确环境的缓存。而且我的validation.yml看起来正确。仍然没有任何内容。可能吗e它是否仅适用于实体目录中的模型?它将适用于所有对象。请仔细检查完全限定的名称。可能名称空间中有键入错误?MyBundle\AppBundle有点可疑。我本应使用MyProject\AppBundle。您确定MyBundle\AppBundle是正确的名称空间吗?您使用了一个公共变量。我应该使用该变量进行测试好的。我正在使用私有变量。可能是这样吗?不。反射用于访问私有变量。只要您确定类名正确,非空应该可以工作。使用dir(get_class($searchModel))来确认。