23

フォームで使用できる symfony の電子メールバリデーターがあります: http://symfony.com/doc/current/reference/constraints/Email.html

私の質問は次のとおりです: 電子メールアドレスを検証するために、このバリデーターをコントローラーでどのように使用できますか?

これはユーザーに PHP preg_match を使用することで可能ですが、私の質問は、既に組み込まれている Symfony の電子メール バリデーターを使用する可能性があるかどうかです。

前もって感謝します。

4

6 に答える 6

57

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-08-19T14:42:19.487 に答える
17

フォーム外の電子メール アドレス (1 つまたは複数) の検証に関する投稿を書きました

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

また、Email Constraint に対して検証し、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-10-29T14:42:55.207 に答える
10

コントローラー自体でフォームを作成し、アクションで電子メールを検証する場合、コードは次のようになります。

// 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()
   ));
}

私も新しく、それを学んでいます。どんな提案もいただければ幸いです...

于 2013-08-19T14:46:25.350 に答える