问题:当表单在没有数据的情况下提交时,isValidat()返回true。
表单实体(数据类),存储提交的数据:
<?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(模板服务和构建器服务都是编写的,只是为了便于阅读而在此处提交):
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 ]
验证.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));
}
}
如果有人能帮我做这件事,我会非常感激。。。。
嗯不久前也遇到了这个问题,还没有想到——我是symfony的新手,我粗略的搜索引擎搜索显示了nada,我也很感激这里的快速修复!