Пользовательский пакет для репозитория с бесконечным циклом 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.

Author: Brewal, 2015-01-15

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

Большое вам спасибо;)

Габриэль

 0
Author: , 2015-01-19 10:56:12