2016-04-27 7 views
1

Ich lerne Symfony nach dem Buch. Im Lernprogramm habe ich PrePersist-Ereignisse erfolgreich konfiguriert (um das createdAt-Feld zum Zeitpunkt des Einfügens festzulegen).Lebenszyklus Rückruf prePersist nicht feuern (mit YAML-Dateien)

Jetzt versuche ich das gleiche, aber mit YAML-Dateien anstelle von Anmerkungen. Hier meine orm.yml Datei:

AppBundle\Entity\Chronicle: 
    type: entity 
    table: chronicles 
    id: 
     id: 
      type: integer 
      generator: {strategy: AUTO} 
    fields: 
     name: 
      type: string 
      length: 256 
     createdAt: 
      type: datetime 

    manyToOne: 
     creator: 
      targetEntity: User 
      inversedBy: chronicles 
      joinColumn: 
       name: user_id 
       referencedColumnName: id 
     game: 
      targetEntity: Game 
      joinColumn: 
       name: game_id 
       referencedColumnName: id 

    oneToMany: 
     characters: 
      targetEntity: Character 
      mappedBy: chronicle 

    lifeCycleCallbacks: 
     prePersist: [ setCreatedAtValue ] 

Und das ist ein Ausschnitt aus meiner Entity-Klasse:

class Chronicle 
{ 
    private $id; 

    private $name; 
    private $createdAt; 

    // Associations 
    private $game; 
    private $creator; 
    private $characters; 
    // TODO: users or user relationships 

    // Constructor 
    public function __construct(User $creator=null) { 
     $this->characters = new ArrayCollection(); 
     $this->creator = $creator; 
    } 

    /** 
    * Set createdAt at the current time. 
    * 
    * (Lifecycle callback) 
    */ 
    public function setCreatedAtValue() 
    { 
     $this->createdAt = new \DateTime(); 
    } 
    // ... 
} 

Aber die setCreatedAtValue() Methode nie aufgerufen. So bekomme ich eine Ausnahme, wenn ich versuche, ein Objekt einzufügen.

Ich habe festgestellt, dass ich bei der Verwendung von Annotationen über die Existenz von Lebenszyklus-Callbacks mit der Annotation @ORM \ HasLifecycleCallbacks() berichten muss, aber ich habe nirgendwo eine Entsprechung zu der in Yml gefunden, oder wenn dies erforderlich ist.

In einem Tutorial habe ich gefunden, ich sollte den Rückruf in services.yml registrieren, aber das Tutorial nie erwähnen, und ich habe es nirgendwo anders gefunden.

Antwort

0

Es wird aufgerufen, wenn Sie "LifeCycleCallbacks" in "LifecycleCallbacks" ändern.