无限循环存储库symfony2 fos用户包

时间:2015-01-15 13:49:55

标签: php symfony bundle fosuserbundle symfony-forms

我只是覆盖了Symfony2的FOSUser Bundle的UserManager.php,特别是updateUser函数(我有捆绑的最后版本和框架的最后版本)。

这是函数(带有调试部分):

<?php
    /**
     * Updates a user.
     *
     * @param UserInterface $user
     * @param Boolean       $andFlush Whether to flush the changes (default true)
     */
    public function updateUser(UserInterface $user, $andFlush = true, $form = false)
    {

        $this->updateCanonicalFields($user);
        $this->updatePassword($user);

        if ($form !== false) {
            $em = $this->objectManager;

            $user->setStatus($em->getRepository('BirdOfficeBundle:Status')->find(1));

            $language = $em->getRepository('BirdOfficeBundle:Language')->getLanguage(1);

            echo '<pre>';
            var_dump($language);die();

            //$user->setLanguage($em->getRepository('BirdOfficeBundle:Language')->find(1));
            //$user->setType($em->getRepository('BirdOfficeBundle:Type')->find(1));

            echo '<pre>';var_dump($user);die();
        }

        $this->objectManager->persist($user);
        if ($andFlush) {
            $this->objectManager->flush();
        }
    }
?>

我想用这个函数做的是在提交我的注册表后从我的RegistrationController.php(registerAction方法)调用它。

问题如下:

当我设定状态时,它的效果非常好。当我尝试使用其他存储库中的find方法(如Langue,Type或其他)时,我的Web浏览器崩溃了。

我试图在另一个控制器中使用它进行测试,并且效果非常好。

那么,问题可能是什么?

顺便说一句,我尝试使用findAll或个人查询,但它也崩溃了。

我检查了我的dev.log文件,其中没有event.ERROR

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。 我删除了find()我自己的函数调用(getStatusgetLanguagegetType),并在其中放入了try / catch调用。

现在,它真的很棒!

以下是Acme/AcmeBundle/Repository/LanguageRepository.php

的代码
<?php

namespace Acme\AcmeBundle\Repository;

use Doctrine\ORM\EntityRepository;

class LanguageRepository extends EntityRepository
{
    public function getLanguage($id) {
        $db = $this
                ->createQueryBuilder('l')
                ->andWhere('l.id = :id')
                ->setParameter('id', $id)
        ;

        try {
            $language = $db->getQuery()->getSingleResult();
        } catch (\Doctrine\Orm\NoResultException $e) {
            $language = null;
        }
        return $language;
    }
}

UserManager.php方法的代码:

<?php

    $language = $em->getRepository('AcmeBundle:Language')->getLanguage(1);
    if (is_null($language)) {
       $language = 1;
    }
    $user->setLanguage($language);

之后,我发起了php app/console cache:clear

非常感谢你;)

加布里埃尔