首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Symfony2 -如何在控制器中验证电子邮件地址

Symfony2 -如何在控制器中验证电子邮件地址
EN

Stack Overflow用户
提问于 2013-08-19 22:20:09
回答 4查看 44.7K关注 0票数 23

symfony中有一个电子邮件验证器,可以在以下表单中使用:http://symfony.com/doc/current/reference/constraints/Email.html

我的问题是:如何在我的控件中使用这个验证器来验证电子邮件地址?

使用PHP preg_match for usere是可能的,但我的问题是,是否有可能使用已经内置在电子邮件验证器中的Symfony。

提前谢谢你。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-19 22:42:19

通过使用Validator服务的validateValue方法

代码语言:javascript
复制
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
    // ...
}
// ...
票数 57
EN

Stack Overflow用户

发布于 2013-10-29 22:42:55

我写了一篇关于在表单之外验证电子邮件地址(一个或多个)的帖子

http://konradpodgorski.com/blog/2013/10/29/how-to-validate-emails-outside-of-form-with-symfony-validator-component/

它还介绍了一个常见的bug,在这个bug中,您可以根据电子邮件约束进行验证,而忘记了NotBlank

代码语言:javascript
复制
/**
 * 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;
}

我希望这能帮到你

票数 17
EN

Stack Overflow用户

发布于 2013-08-19 22:46:25

如果您在控制器本身中创建表单,并希望在操作中验证电子邮件,则代码将如下所示。

代码语言:javascript
复制
// 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()
   ));
}

我也是新手,正在学习它,任何建议都将不胜感激…

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18316166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档