这里的错误不是明确的,从我认为它只是与参数之间的类型差异有关,但我还没有找到解决这个问题的方法......EventListener正在接收 2 个参数,但它没有提供哪个参数的信息它们是该问题的“1”参数,但我认为它是第二个,因为错误表示UserBundle\Form\FormEvent的单数实例,第一个参数是FormEvents复数类中的通用事件。
错误显示:
类型错误:传递给 UserBundle\Form\UserType::UserBundle\Form{closure}() 的参数 1 必须是 UserBundle\Form\FormEvent 的一个实例,Symfony\Component\Form\FormEvent 的实例给定
<?php
namespace UserBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormEvents;
class UserType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username',HiddenType::class)
->add('firstname',TextType::class)
->add('lastname',TextType::class)
->add('email', RepeatedType::class,
array('type' => EmailType::class, 'invalid_message' => 'The email fields must match.','options'
=> array('attr' => array('class' => 'email-field')),'required' => true, 'first_options'
=> array('label' => 'Email'),'second_options' => array('label' => 'Confirm email'),))
->add('password', RepeatedType::class,
array('type' => PasswordType::class, 'invalid_message' => 'The password fields must match.','options'
=> array('attr' => array('class' => 'password-field')),'required' => true, 'first_options'
=> array('label' => 'Password'),'second_options' => array('label' => 'Confirm password'),))
->add('save',SubmitType::class)
->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
$data = $event->getData();
$form = $event->getForm();
if ($data['firstname'] !== null && $data['lastname'] !== null){
$username = $data['firstname']." ".$data['lastname'];
$data['username'] = $username;
$event->setData($data);
}
});
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'UserBundle\Entity\User'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'user';
}
}
Run Code Online (Sandbox Code Playgroud)
我已经按照 symfony 文档给出的步骤
您缺少FormEvent类导入。
use Symfony\Component\Form\FormEvent;
Run Code Online (Sandbox Code Playgroud)
由于您没有导入它,它使用了类 ( UserBundle\Form\FormEvent)的当前命名空间。但是这个类不存在。
| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |