我只是覆盖了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
。
答案 0 :(得分:0)
我终于找到了解决方案。
我删除了find()
我自己的函数调用(getStatus
,getLanguage
,getType
),并在其中放入了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
非常感谢你;)
加布里埃尔