Php Symfony 3表单验证:检查现有数据库条目

Php Symfony 3表单验证:检查现有数据库条目,php,forms,symfony,validation,doctrine,Php,Forms,Symfony,Validation,Doctrine,我目前正在做我的第一个Symfony项目,并为一个我想要实现的特殊功能而挣扎。 我有一个表单,人们必须在其他数据旁边输入许可证密钥才能激活某项服务。 提交表单时,我需要验证所有数据,验证的一部分是检查给定的许可证密钥是否有效(存在于许可证密钥数据库中) 我的表单位于一个单独的表单类中,如下所示(剥离到重要部分): 您可以为此用例编写自己的自定义约束和验证器类 验证器是一种服务,因此您可以根据需要注入任何其他服务。(即实体管理器)。 这样,表单就不必处理验证逻辑本身 您可以为此用例编写自己的自定

我目前正在做我的第一个Symfony项目,并为一个我想要实现的特殊功能而挣扎。
我有一个表单,人们必须在其他数据旁边输入许可证密钥才能激活某项服务。
提交表单时,我需要验证所有数据,验证的一部分是检查给定的许可证密钥是否有效(存在于许可证密钥数据库中)

我的表单位于一个单独的表单类中,如下所示(剥离到重要部分):


您可以为此用例编写自己的自定义约束和验证器类

验证器是一种服务,因此您可以根据需要注入任何其他服务。(即实体管理器)。
这样,表单就不必处理验证逻辑本身

您可以为此用例编写自己的自定义约束和验证器类

验证器是一种服务,因此您可以根据需要注入任何其他服务。(即实体管理器)。
这样,表单就不必处理验证逻辑本身

验证程序是一种服务,这是我丢失的一点信息。非常适合我,谢谢。验证器是一项服务,我遗漏了一点信息。非常适合我,谢谢。
<?php

namespace AppBundle\Form;

use AppBundle\Entity;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints as Constraint;
use Symfony\Component\Validator\Context\ExecutionContextInterface;

class Activation extends AbstractType
{
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Entity\Customer::class,
            'translation_domain' => 'forms'
        ]);
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('activationCode', Type\TextType::class, [
                'mapped' => false,
                'constraints' => [new Constraint\Callback(
                    function ($object, ExecutionContextInterface $context, $payload) {

                    }
                )]
            ])
            ->add('firstName', Type\TextType::class)
            ->add('lastName', Type\TextType::class)
            ->add('email', Type\RepeatedType::class, [
                'type' => Type\EmailType::class,
                'invalid_message' => 'The E-Mail fields must match.',
                'first_options' => ['label' => 'E-Mail'],
                'second_options' => ['label' => 'Repeat E-Mail'],
            ])
            ->add('activate', Type\SubmitType::class);
    }

}