2015-02-06 84 views
1

問題:當提交表單時沒有數據isValid()返回true。使用注入表單進行表單驗證Symfony2

表實體(數據類),提交存儲數據:

<?php 
    namespace Bookboon\Premium\AppBundle\Entity; 



    class Form { 

    protected $email; 
    protected $id; 
    protected $type; 
    protected $voucher; 
    protected $subscription; 
    protected $affiliate; 

    public function getEmail(){ 
     return $this->email; 
    } 

    public function setEmail($email){ 
     $this->email = $email; 
    } 

    public function getId(){ 
     return $this->id; 
    } 

    public function setId($id){ 
     $this->id = $id; 
    } 

    public function getType(){ 
     return $this->type; 
    } 

    public function setType($type){ 
     $this->type = $type; 
    } 

    public function getVoucher(){ 
     return $this->voucher; 
    } 

    public function setVoucher($voucher){ 
     $this->voucher = $voucher; 
    } 

    public function setSubscription($subscription){ 
     $this->subscription = $subscription; 
    } 

    public function getSubscription(){ 
     return $this->subscription; 
    } 

    public function setAffiliate($affiliate){ 
     $this->affiliate = $affiliate; 
    } 

    public function getAffiliate(){ 
     return $this->affiliate; 
    } 
    } 

表單類型類別:

namespace Bookboon\Premium\AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Bookboon\Premium\AppBundle\Entity; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class SignUpFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('email', 'email', array('label'=>' ', 
              'attr' => array('placeholder'=>'Your email', 'class'=>'email'))) 
      ->add('save', 'submit', array( 'label'=>'Access Premium', 
              'attr'=>array('class'=>'btn btnProceed'), 
              'validation_groups' => true)) 
      ->add('facebook', 'submit', array('validation_groups' => false, 
               'attr' =>array('class'=>'btn btnFacebook cancel'))) 
      ->add('linkedin', 'submit', array('validation_groups' => false, 
               'attr' =>array('class'=>'btn btnLinkedIn cancel'))) 
      ->add('id', 'hidden') 
      ->add('type', 'hidden') 
      ->add('voucher', 'hidden'); 
    } 

    public function getName() 
    { 
     return 'SignUpForm'; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Bookboon\Premium\AppBundle\Entity\Form', 
     )); 
    } 
} 

Services.yml(模板服務和建設者服務都寫,只是在這裏ommitted便於):

premium.form.sign_up: 
     class: Bookboon\Premium\AppBundle\Form\SignUpFormType 
     tags: 
      - { name: form.type, alias: SignUpForm } 


    premium.controller.signup: 
     class: Bookboon\Premium\AppBundle\Controller\SignUpController 
     arguments: [ @templating, @form.builder, @premium.form.sign_up ] 

Validation.yml:

Bookboon\Premium\AppBundle\Entity\Form: 
    properties: 
     email: 
      - NotBlank: ~ 

表單控制器:

namespace Bookboon\Premium\AppBundle\Controller; 

use Bookboon\Premium\AppBundle\Form\SignUpFormType; 
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface; 
use Symfony\Component\Form\FormBuilder; 
use Symfony\Component\HttpFoundation\Request; 


class SignUpController implements DetectionController 
{ 
    private $_templating; 
    private $_formBuilder; 
    private $_form; 

    public function __construct(EngineInterface $templating, FormBuilder $formBuilder, SignUpFormType $signUpFormType) 
    { 
     $this->_templating = $templating; 
     $this->_formBuilder = $formBuilder; 
     $this->_form = $signUpFormType; 
    } 


    public function signUpAction(Request $request) 
    { 

     $form = $this->_formBuilder->create($this->_form->getName(), $this->_form); 
     $form = $form->getForm(); 


     $form->handleRequest($request); 

     dump($form->isValid()); // Returns true regardless of data (even if blank) 

     if($request->getMethod() == 'POST'){ 

      if($form->isValid()){ 
       dump('yata!'); 
      } 

      return $this->renderForm($form->createView(), 'signup'); 
     } 

     return $this->renderForm($form->createView(), 'signup'); 
    } 

    public function renderForm($form, $type) 
    { 
     return $this->_templating->renderResponse('PremiumBundle:Connect:'.$type.'.html.twig', array('form'=>$form)); 
    } 

} 

會很感激,如果有人可以幫我這個....

回答

0

嗯,就遇到了這個問題,而回過,也沒有想通 - 我是symfony的新手,我粗略的搜索引擎搜索揭示了nada,我也會在這裏欣賞quickmefix!