Пользовательский пакет для репозитория с бесконечным циклом symfony2 fos
Я просто переопределяю UserManager.php
пакета FOSUser Symfony2, в частности функцию 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
(метод регистрации) после отправки моей регистрационной формы.
Проблема заключается в следующем:
Когда я устанавливаю свой статус, он работает очень хорошо. Когда Я пытаюсь использовать метод поиска из других репозиториев (например, Язык, тип или что-то еще), мой веб-браузер выходит из строя.
Я попытался использовать его в другом контроллере для тестирования, и он работает очень хорошо.
Итак, в чем может быть проблема?
Кстати, я пытался использовать findAll или личные запросы, но он тоже вылетает.
Я проверил свой файл dev.log
, и в нем нет event.ERROR
.
1 answers
Наконец-то я нахожу решение.
Я удалил вызовы 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
Большое вам спасибо;)
Габриэль