Symfony isValid()始终返回true

时间:2015-02-09 12:01:43

标签: php symfony

因为它代表isValid()在表单提交时返回true,无论字段是否已填写。目标是获取isValid()方法来实际检查数据。任何帮助将非常感激。

表单实体:

namespace Bookboon\Premium\AppBundle\Entity;

class Form {

    protected $email;

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

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

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

    // The rest of the getters & setters have been omitted for ease of reading, but they look very similar to the above. 
}

services.yml:

services:

    form.builder:
        class: Symfony\Component\Form\FormBuilder
        arguments: ['SignUpForm', 'Bookboon\Premium\AppBundle\Entity\Form', @event_dispatcher, @form.factory]

    premium.form.entity:
        class: Bookboon\Premium\AppBundle\Entity\Form
        arguments: [ ]

    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, @form.factory, @premium.form.entity ]

validation.yml:

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

SignUpController.php:

namespace Bookboon\Premium\AppBundle\Controller;

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


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

    public function __construct(EngineInterface $templating, FormBuilder $formBuilder, SignUpFormType $signUpFormType, FormFactory $formFactory, Form $formData)
    {
        $this->_templating = $templating;
        $this->_formBuilder = $formBuilder;
        $this->_form = $signUpFormType;
        $this->_formFactory = $formFactory;
        $this->_formData = $formData;
    }



    public function signUpDetailsAction()
    {
        return $this->renderForm('SignUpDetailsForm', new SignUpDetailsForm(), 'details');
    }

    public function signUpAction(Request $request)
    {
        $form = $this->createForm($this->_form, $this->_formData);

        $form->handleRequest($request);

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

            if($form->isValid()){
                dump('Form Is Valid!');
            }

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

    public function createForm($type, $data = null, array $options = array())
    {
        return $this->_formFactory->create($type, $data, $options);
    }

}

SignUpFormType:

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', 'text', 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',
        ));
    }
}

0 个答案:

没有答案
相关问题