2016-02-24 6 views
1

Я просто пытаюсь добавить ограничение электронной почты в неотображенное поле ниже и по какой-то причине в действии контроллера он не подбирает его. Есть ли что-то еще, что мне нужно делать?Symfony2 Form Builder custom unmapped field constraint

действия Форма класса

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('name', null, [ 
     'label' => false, 
     'attr' => ['placeholder' => 'Name*'] 
    ]); 

    $builder->add('email', null, [ 
     'mapped' => false, 
     'label' => false, 
     'attr' => ['placeholder' => 'Email*'], 
     'constraints' => [ 
      new Email(["message" => "Please enter a valid Email Address"]) 
     ] 
    ]); 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Test\AppBundle\Entity\Feedback', 
     'cascade_validation' => true, 
     'validation_groups' => function(Form $form) 
     { 
      $feedback = $form->getData(); /** @var Feedback $feedback */ 
      if ($feedback->getType() == Feedback::Type_Feedback) 
       return Feedback::ValidationGroup_Feedback; 
      else if ($feedback->getType() == Feedback::Type_Link) 
       return Feedback::ValidationGroup_Link; 

      throw new \Exception("Couldn't generate a valid Validation Group for FeedbackForm.php"); 
     }, 
    )); 
} 

/** 
* @return string 
*/ 
public function getName() 
{ 
    return 'site_feedback_form'; 
} 

Контроллер

public function feedbackSiteSubmitAction(Request $request) 
{ 
    // The form award 
    $feedback = new Feedback(); 

    // Create the form so we can bind send form values to it 
    $form = $this->createNewFeedbackForm($feedback); 

    // Bind form values 
    $form->handleRequest($request); 

    // Save 
    if ($form->isValid()) 
    { 
     // Add the submission to a member 
     $email = $form->get('email')->getData(); 
     $email = strtolower($email); 
     $member = $this->getMemberRepository()->loadByEmail($email); 
     if (!$member) 
      $member = $this->generateNewPersistedMember($email); 

     // Update the mail property 
     $member->setReceiveEmail(!$form->get('dontReceiveAlerts')->getData()); 

     // Add the feedback to the member 
     $feedback->setMember($member); 

     // Persist the Feedback 
     $this->getEntityManager()->persist($feedback); 

     // Commit 
     $this->getEntityManager()->flush(); 

     // Response 
     return $this->jsonSuccess([ 
      'html' => $this->renderView('TestAppBundle:Site/partials:feedback_form_success.html.twig', [ 
       'typeString' => $feedback->getType() == Feedback::Type_Feedback ? "Feedback" : "Resource suggestion" 
      ]) 
     ]); 
    } 

    // Return errors 
    return $this->jsonError($this->getAllFormErrors($form)); 
} 

ответ

0

В Symfony 2.8 вверх вы сделайте следующее:

$builder->add('email', Symfony\Component\Form\Extension\Core\Type\EmailType::class); 

Версии до этого использования:

$builder->add('email', 'email'); 

Затем вы добавляете все свои критерии проверки через аннотации в свой класс Feedback. См. Параметры для EmailTypehere.

Смежные вопросы