10.04.2018 Views

Doctrine_manual-1-2-en

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

Listing<br />

22-26<br />

Listing<br />

22-27<br />

• <strong>Doctrine</strong>_Ev<strong>en</strong>t::RECORD_INSERT<br />

• <strong>Doctrine</strong>_Ev<strong>en</strong>t::RECORD_SERIALIZE<br />

• <strong>Doctrine</strong>_Ev<strong>en</strong>t::RECORD_UNSERIALIZE<br />

• <strong>Doctrine</strong>_Ev<strong>en</strong>t::RECORD_DQL_SELECT<br />

• <strong>Doctrine</strong>_Ev<strong>en</strong>t::RECORD_DQL_DELETE<br />

• <strong>Doctrine</strong>_Ev<strong>en</strong>t::RECORD_DQL_UPDATE<br />

Here are some examples of hooks being used and the code that is returned:<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 />

$ev<strong>en</strong>t->getCode(); // <strong>Doctrine</strong>_Ev<strong>en</strong>t::CONN_EXEC<br />

}<br />

}<br />

class MyRecord ext<strong>en</strong>ds <strong>Doctrine</strong>_Record<br />

{<br />

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

{<br />

$ev<strong>en</strong>t->getCode(); // <strong>Doctrine</strong>_Ev<strong>en</strong>t::RECORD_UPDATE<br />

}<br />

}<br />

Getting the Invoker<br />

The method getInvoker() returns the object that invoked the giv<strong>en</strong> ev<strong>en</strong>t. For example for<br />

ev<strong>en</strong>t <strong>Doctrine</strong>_Ev<strong>en</strong>t::CONN_QUERY the invoker is a <strong>Doctrine</strong>_Connection object.<br />

Here is an example of using the record hook named preUpdate() that is invoked wh<strong>en</strong> a<br />

<strong>Doctrine</strong>_Record instance is saved and an update is issued to the database:<br />

class MyRecord ext<strong>en</strong>ds <strong>Doctrine</strong>_Record<br />

{<br />

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

{<br />

$ev<strong>en</strong>t->getInvoker(); // Object(MyRecord)<br />

}<br />

}<br />

Listing<br />

22-28<br />

Skip Next Operation<br />

<strong>Doctrine</strong>_Ev<strong>en</strong>t provides many methods for altering the execution of the list<strong>en</strong>ed method<br />

as well as for altering the behavior of the list<strong>en</strong>er chain.<br />

For some reason you may want to skip the execution of the list<strong>en</strong>ed method. It can be done as<br />

follows (note that preExec() could be any list<strong>en</strong>er method):<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 />

// some business logic, th<strong>en</strong>:<br />

}<br />

}<br />

$ev<strong>en</strong>t->skipOperation();<br />

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

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

Saved successfully!

Ooh no, something went wrong!