我有以下UserType.php文件,
<?php
namespace Acme\UserBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Acme\UserBundle\Controller\UserController;
class UserType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('UserName')
->add('description')
->add('email')
->add('password')
;
$builder->addEventListener(FormEvents::PRE_SUBMIT, array($this, 'onPreSubmit'));
}
public function onPreSubmit(FormEvent $event)
{
$User = $event->getData();
$email = $User['email'];
$UserObj = new UserController();
$unique_id = $UserObj->idUnique($email);
$User['userName'] = $unique_id;
$event->setData($User);
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\UserBundle\Entity\User'
));
}
/**
* @return string
*/
public function getName()
{
return 'acme_userbundle_user';
}
}
当用户首次在网站上注册时,我想处理他的电子邮件以创建唯一ID。为此,我使用事件获取表单数据。因为,在symfony中,用户按下提交按钮后无法修改表单数据。因此,我使用PreSubmit事件来操纵用户的表单数据。效果很好。
<?php
public function loginAction(Request $request)
{
$request = $this->getRequest();
// here program control goes directly to preSubmit event created for registration.
}
现在,当用户登录系统时,我正在使用相同的 UserController.php (在上面的代码中指定)和一个名为&#34; login&#34;的方法。但是,这次当用户按下提交按钮时,他直接被带到为了注册的表单数据操作而创建的onPreSubmit事件。我应该如何更改登录控制器方法,以便在程序控制转到登录方法时 onPreSubmit 不应该中断?