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

标签 php symfony bundle fosuserbundle symfony-forms

我只是覆盖了 Symfony2 的 FOSUser Bundle 的 UserManager.php,尤其是 updateUser 函数(我有最新版本的 bundle 和最新版本的框架)。

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

<?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 方法)调用它。

问题如下:

当我设置我的状态时,它运行良好。当我尝试使用其他存储库(如 Langue、Type 或其他)的查找方法时,我的网络浏览器崩溃了。

我尝试在另一个 Controller 中使用它进行测试,它运行良好。

那么,可能是什么问题?

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

我检查了我的 dev.log 文件,里面没有 event.ERROR

最佳答案

我终于找到了解决办法。 我删除了对我自己的函数(getStatusgetLanguagegetType)的 find() 调用,然后我放了一个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

非常感谢;)

加布里埃尔

关于php - 无限循环存储库 symfony2 fos 用户包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27964911/

相关文章:

model-view-controller - Symfony2/Doctrine,必须将业务逻辑放在我的 Controller 中吗?和复制 Controller ?

php - 如何在 API 平台中创建自定义端点并将其添加到文档中?

ruby-on-rails - bundler :在使用 gem 进行 bundle 安装期间,找不到带有可执行 bundle (Gem::GemNotFoundException) 的 gem bundler (>= 0.a)

php - 我想使用 PHP 的 PDO 将数据插入到 mysql 数据库中。但是没有插入数据

php - 将数组作为函数参数提供,并在PHP中将其作为普通变量获取

php - 在 Laravel 5 中获取 URL 段

spring - 如何将 Liferay portlet 转换为 OSGI 包?

php - 使字符串的特定部分加粗

symfony - 如何验证自定义 Controller 中的数据

objective-c - 是否可以将不同的 plist 复制到应用程序包代码中?