symfony中有一个电子邮件验证器,可以在以下表单中使用:http://symfony.com/doc/current/reference/constraints/Email.html
我的问题是:如何在我的控件中使用这个验证器来验证电子邮件地址?
使用PHP preg_match for usere是可能的,但我的问题是,是否有可能使用已经内置在电子邮件验证器中的Symfony。
提前谢谢你。
发布于 2013-08-19 22:42:19
通过使用Validator服务的validateValue方法
use Symfony\Component\Validator\Constraints\Email as EmailConstraint;
// ...
public function customAction()
{
$email = 'value_to_validate';
// ...
$emailConstraint = new EmailConstraint();
$emailConstraint->message = 'Your customized error message';
$errors = $this->get('validator')->validateValue(
$email,
$emailConstraint
);
// $errors is then empty if your email address is valid
// it contains validation error message in case your email address is not valid
// ...
}
// ...
发布于 2013-10-29 22:42:55
我写了一篇关于在表单之外验证电子邮件地址(一个或多个)的帖子
它还介绍了一个常见的bug,在这个bug中,您可以根据电子邮件约束进行验证,而忘记了NotBlank
/**
* Validates a single email address (or an array of email addresses)
*
* @param array|string $emails
*
* @return array
*/
public function validateEmails($emails){
$errors = array();
$emails = is_array($emails) ? $emails : array($emails);
$validator = $this->container->get('validator');
$constraints = array(
new \Symfony\Component\Validator\Constraints\Email(),
new \Symfony\Component\Validator\Constraints\NotBlank()
);
foreach ($emails as $email) {
$error = $validator->validateValue($email, $constraints);
if (count($error) > 0) {
$errors[] = $error;
}
}
return $errors;
}
我希望这能帮到你
发布于 2013-08-19 22:46:25
如果您在控制器本身中创建表单,并希望在操作中验证电子邮件,则代码将如下所示。
// add this above your class
use Symfony\Component\Validator\Constraints\Email;
public function saveAction(Request $request)
{
$form = $this->createFormBuilder()
->add('email', 'email')
->add('siteUrl', 'url')
->getForm();
if ('POST' == $request->getMethod()) {
$form->bindRequest($request);
// the data is an *array* containing email and siteUrl
$data = $form->getData();
// do something with the data
$email = $data['email'];
$emailConstraint = new Email();
$emailConstraint->message = 'Invalid email address';
$errorList = $this->get('validator')->validateValue($email, $emailConstraint);
if (count($errorList) == 0) {
$data = array('success' => true);
} else {
$data = array('success' => false, 'error' => $errorList[0]->getMessage());
}
}
return $this->render('AcmeDemoBundle:Default:update.html.twig', array(
'form' => $form->createView()
));
}
我也是新手,正在学习它,任何建议都将不胜感激…
https://stackoverflow.com/questions/18316166
复制相似问题