2012. október 29., hétfő

Doctrine lifecycle callbacks használata

A symfony-ban lehetőségünk van a Doctryne lifecycle callbacks használatára, amivel olyan függvényeket tudunk létrehozni, amik a mentés előtt, vagy után fussanak le. Lehetőségünk van egy prePersist (), és postPersist() eseményekre feliratkozni, arra azonban figyelni kell, hogy csak akkor futnak le az események, ha valami változott az Entity-ben. Ez azért fontos, mert ha az Entity-ben használunk olyan attribútumot (pl file), amik nem szerepelnek az adatbázisban és csak az az attribútum változik, akkor nem fog lefutni az esemény, pedig lehet, hogy ezt a változót használva változtattunk volna az Entity-n.


Erre az lehet a megoldás, hogy van egy updated mezője ez entity-nek, ami legyen DateTime típusú, és ha válozott az Entity, akkor állítsuk \DateTime("now")-ra, ezzel lefut a változtatás, amikor kell.


Példa a symfony-ban:

http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html


Doctrine:
http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html

Használatát annotation-nel lehet elérni. Kell az entity osztálynak egy HasLifecycleCallbacks annotation:


/**
* @ORM\Table()
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class Attachment

ezenkívül kell egy függvény, ami szeretne feliratkozni egy eseményre:

/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUpload()