Прослушиватель событий PreUpdate приводит к сбою сайта

Я пытаюсь создать preUpdate, я делал это с postUpdate, но я не учитывал тот факт, что я менялся всякий раз, когда производилось редактирование этого объекта, независимо от поля... поэтому я прочитал, что должен вместо этого используйте preUpdate...

Это мой прослушиватель preUpdate:

namespace Prizes\PrizesBundle\EventListener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Prizes\PrizesBundle\Entity\Prize;
use Prizes\CatalogBundle\Entity\CatalogHasPrize as CHP;

/**
 * Description of DeactivatePrizesInCatalog
 *
 * @author Victoria Noguera
 * Desactiva premios en catalogos cuando se desactiven en el prize central.
 */
/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */
class DeactivatePrizesInCatalog {
/**
     * @ORM\PrePersist()
     * @ORM\PreUpdate()
     */
    public function preUpdate(LifecycleEventArgs $args) {
       $entity = $args->getEntity();
        $entityManager = $args->getEntity

Manager();
    if ($entity instanceof Prize) {
        if ($args->hasChangedField('status')) {
            $status_new = $args->getNewValue('status');
            if ($status_new->getName() == "Inactive") {
                $statusinactive = $entityManager->getRepository('AppStatusBundle:Status')->find(8);
                $q = $entityManager->createQuery("UPDATE CatalogBundle:CatalogHasPrize c SET c.status = :statusid WHERE c.status = 7 AND c.prize = :prizeid")
                        ->setParameters(array('statusid' => $statusinactive, 'prizeid' => $entity->getId()));
                $rs = $q->getResult();
            } else if ($status_new->getName() == "Active") {
                $statusinactive = $entityManager->getRepository('AppStatusBundle:Status')->find(7);
                $q = $entityManager->createQuery("UPDATE CatalogBundle:CatalogHasPrize c SET c.status = :statusid WHERE c.status = 8 AND c.prize = :prizeid")
                        ->setParameters(array('statusid' => $statusinactive, 'prizeid' => $entity->getId()));
                $rs = $q->getResult();
            }
        }
    }
}

}

и именно так я делаю это в файле config.yml (я только что прочитал, что он входит в services.yml, но я изменю его позже)

services:
    preupdate.listener:
        class: Prizes\PrizesBundle\EventListener\DeactivatePrizesInCatalog
        tags: 
             - { name: doctrine.event_listener , event: preUpdate }

однако, когда я это делаю, мой проект переходит от полностью функционального к сервису 503, недоступному. Даже если я просто напишу public function preUpdate(LifecycleEventArgs $args) { }, он вылетит, я предполагаю, что проблема с конфигурацией, но я понятия не имею, что я делаю неправильно.

Буду признателен за любую предложенную помощь. Спасибо


person Splendonia    schedule 01.08.2013    source источник
comment
Какая ошибка в журнале ошибок?   -  person Wim Molenberghs    schedule 01.08.2013


Ответы (1)


Вы добавляете информацию о сопоставлении в свой слушатель, который сам по себе не является сущностью:

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */

а также ...

/**
 * @ORM\PrePersist()
 * @ORM\PreUpdate()
 */

... не должно быть в вашем классе слушателя.

Эти аннотации можно использовать в сущности, если сама сущность содержит, например, методы prePersist.

person Nicolai Fröhlich    schedule 01.08.2013
comment
что говорят файлы журналов symfony app\logs\dev.log ... если вы не можете найти что-то там, проверьте файлы журналов php и веб-сервера. Отказ от этих ненужных аннотаций — это первый шаг :) важно… вы очистили кеш? - person Nicolai Fröhlich; 01.08.2013
comment
Не файлы журналов symfony, файлы журналов apache или nginx. Они точно скажут, в чем проблема. Ошибка 503 выглядит как проблема с сервером, а не с проблемой sf - person Wim Molenberghs; 01.08.2013
comment
Файл журнала Apache не имеет ничего общего с этим проектом. - person Splendonia; 01.08.2013
comment
что произойдет, если вы запустите php -l против вашего файла прослушивателя? ... просто для уточнения ... если вы прокомментируете конфигурацию прослушивателя с помощью # (или временно удалите его) ... и очистите свой кеш ... ваш сайт работает безупречно? - person Nicolai Fröhlich; 01.08.2013
comment
Привет. Да, если я прокомментирую настройки прослушивателя, это сработает. Он отлично работает на моем локальном сервере с текущей конфигурацией. В журнале разработки ничего нет, как и в журнале разработки. Php -l говорит, что синтаксических ошибок не обнаружено - person Splendonia; 02.08.2013
comment
и да, я очищал кеш много раз, все равно не работает - person Splendonia; 02.08.2013
comment
Хорошо, Symfony, похоже, не может создать новый кеш. Должен сказать, я использую Windows и работает отлично, может быть, это как-то связано с корпусом. Сервер использует Ubuntu, это должно быть что-то с конфигурацией - person Splendonia; 02.08.2013