2013-08-01 2 views
0

저는 preUpdate를 작성하려고하는데 postUpdate를 사용하여 작업을하고있었습니다.하지만 해당 엔티티의 편집이 이루어질 때마다 변경 중이라는 사실을 고려하지 않았습니다. 필드는 ... 그래서 PreUpdate 이벤트 리스너가 사이트를 크래시합니다.

내 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(); 
      } 
     } 
    } 
} 

} 

이것은 (I 내가 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) { }이라고 쓰여도 구성 문제가 있다고 가정하고 있지만 잘못된 생각을 갖고 있습니다.

제공되는 도움에 감사드립니다. 리스너 클래스가 아니어야합니다 ... ...

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

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

과 : 당신은 그 자체가 실체없는 리스너에 매핑 정보를 추가하는 당신에게

+0

오류 로그에 어떤 오류가 있습니까? –

답변

0

감사드립니다.

엔티티 자체, 즉 prePersist 메소드가 포함 된 엔티티에서 이러한 주석을 사용할 수 있습니다.

+0

안녕하세요, 시도해보십시오. 여전히 503 서비스를 사용할 수 없게됩니다 : ( – Splendonia

+0

symfony의 로그 파일이'app \ logs \ dev.log'라고하면 ... php와 webserver 로그 파일을 검사 할 수 없으면 불필요한 주석을 남기는 것이 첫 번째 단계입니다.) 중요 ... 캐시를 비우셨습니까? – nifr

+0

심포니 로그 파일, 아파치 또는 nginx 로그 파일이 아닙니다. 그들은 문제가 무엇인지 정확하게 말할 것입니다. 503 오류가 sf 문제 대신 serverissue처럼 보입니다. –

관련 문제