同样,我尝试了一个简单的恢复表单忘记了用户密码。
该表单仅包含电子邮件输入。表单处理程序,接收电子邮件,搜索用户,恢复您的密码,并发送带有新密码的电子邮件。重要的是说用户没有被认证。
因此,我需要创建一个自定义约束,以检查电子邮件是否存在于db中。我有一种自己的服务方法。因此,我需要用约束绑定方法。
自定义验证类是:
class ExistEmailValidator extends ConstraintValidator
{
protected $userService;
public function setUserService($userService)
{
echo "Setter...";
var_dump($userService);
die();
$this->userService = $userService;
}
public function validate($value, Constraint $constraint)
{
if($this->userService->existUserEmail($value) == false){
$this->context->addViolation($constraint->message, array('%string%' => $value));
}
}
}
我从services.yml注入服务:
validator.unique.ExistEmailValidator:
class: AppsManantiales\CommonBundle\Validator\Constraints\ExistEmailValidator
tags:
- {name: validator.constraint_validator, alias: user_email_validator}
calls:
- [setUserService, ["userservice"]]
问题是,不要注入服务,因为Symfony说:
错误:调用非对象上的成员函数existUserEmail()
注意:用户服务id是:"userservice“。
php app/console container:debug | grep UserService
userservice container AppsManantiales\CommonBundle\Services\UserService
有什么想法吗?
更新1
我的约束类是:
class ExistEmail extends Constraint{
public $message = 'El e-mail "%string%" no pertenece a ningun usuario del sistema.';
public function validatedBy()
{
return get_class($this).'Validator';
}
}
表格的定义是:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('anUserEmail', 'email',
array(
'constraints' => array(
new ExistEmail()
)
));
}
发布于 2013-12-28 19:14:48
替换,
public function validatedBy()
{
return get_class($this).'Validator';
}
在ExistEmail
约束类中,
public function validatedBy()
{
return 'user_email_validator';
}
为了将约束映射到正确的ExistEmailValidator
实例(在服务容器中实例化的实例)。
https://stackoverflow.com/questions/20818194
复制相似问题