10.04.2018 Views

Doctrine_manual-1-2-en

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Chapter 22: Ev<strong>en</strong>t List<strong>en</strong>ers 310<br />

The above example will output the curr<strong>en</strong>t date as PHP knows it.<br />

Each list<strong>en</strong>er and hook method takes one parameter <strong>Doctrine</strong>_Ev<strong>en</strong>t object.<br />

<strong>Doctrine</strong>_Ev<strong>en</strong>t object holds information about the ev<strong>en</strong>t in question and can alter the<br />

execution of the list<strong>en</strong>ed method.<br />

For the purposes of this docum<strong>en</strong>tation many method tables are provided with column named<br />

params indicating names of the parameters that an ev<strong>en</strong>t object holds on giv<strong>en</strong> ev<strong>en</strong>t. For<br />

example the preCreateSavepoint ev<strong>en</strong>t has one parameter with the name of the created<br />

savepoint, which is quite intuitively named as savepoint.<br />

Listing<br />

22-3<br />

Connection List<strong>en</strong>ers<br />

Connection list<strong>en</strong>ers are used for list<strong>en</strong>ing the methods of <strong>Doctrine</strong>_Connection and its<br />

modules (such as <strong>Doctrine</strong>_Transaction). All list<strong>en</strong>er methods take one argum<strong>en</strong>t<br />

<strong>Doctrine</strong>_Ev<strong>en</strong>t which holds information about the list<strong>en</strong>ed ev<strong>en</strong>t.<br />

Creating a New List<strong>en</strong>er<br />

There are three differ<strong>en</strong>t ways of defining a list<strong>en</strong>er. First you can create a list<strong>en</strong>er by making<br />

a class that inherits <strong>Doctrine</strong>_Ev<strong>en</strong>tList<strong>en</strong>er:<br />

class MyList<strong>en</strong>er ext<strong>en</strong>ds <strong>Doctrine</strong>_Ev<strong>en</strong>tList<strong>en</strong>er<br />

{<br />

public function preExec(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t)<br />

{<br />

}<br />

}<br />

Note that by declaring a class that ext<strong>en</strong>ds <strong>Doctrine</strong>_Ev<strong>en</strong>tList<strong>en</strong>er you don't have to<br />

define all the methods within the <strong>Doctrine</strong>_Ev<strong>en</strong>tList<strong>en</strong>er_Interface. This is due to a<br />

fact that <strong>Doctrine</strong>_Ev<strong>en</strong>tList<strong>en</strong>er already has empty skeletons for all these methods.<br />

Sometimes it may not be possible to define a list<strong>en</strong>er that ext<strong>en</strong>ds<br />

<strong>Doctrine</strong>_Ev<strong>en</strong>tList<strong>en</strong>er (you might have a list<strong>en</strong>er that inherits some other base class).<br />

In this case you can make it implem<strong>en</strong>t <strong>Doctrine</strong>_Ev<strong>en</strong>tList<strong>en</strong>er_Interface.<br />

Listing<br />

22-4<br />

class MyList<strong>en</strong>er implem<strong>en</strong>ts <strong>Doctrine</strong>_Ev<strong>en</strong>tList<strong>en</strong>er_Interface<br />

{<br />

public function preTransactionCommit(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

public function postTransactionCommit(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

public function preTransactionRollback(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

public function postTransactionRollback(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

public function preTransactionBegin(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

public function postTransactionBegin(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

public function postConnect(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

public function preConnect(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

public function preQuery(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

public function postQuery(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

public function prePrepare(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

public function postPrepare(<strong>Doctrine</strong>_Ev<strong>en</strong>t $ev<strong>en</strong>t) {}<br />

----------------- Brought to you by

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!