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.