在UserController中使用登录操作为注册操作中断创建的PreSubmit事件

时间:2014-09-09 17:18:35

标签: php symfony

我有以下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 不应该中断?

0 个答案:

没有答案