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 311<br />

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

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

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

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

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

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

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

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

}<br />

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

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

All list<strong>en</strong>er methods must be defined here otherwise PHP throws fatal error.<br />

The third way of creating a list<strong>en</strong>er is a very elegant one. You can make a class that<br />

implem<strong>en</strong>ts <strong>Doctrine</strong>_Overloadable. This interface has only one method: __call(),<br />

which can be used for catching *all* the ev<strong>en</strong>ts.<br />

class MyDebugger implem<strong>en</strong>ts <strong>Doctrine</strong>_Overloadable<br />

{<br />

public function __call($methodName, $args)<br />

{<br />

echo $methodName . ' called !';<br />

}<br />

}<br />

Listing<br />

22-5<br />

Attaching list<strong>en</strong>ers<br />

You can attach the list<strong>en</strong>ers to a connection with setList<strong>en</strong>er().<br />

$conn->setList<strong>en</strong>er(new MyDebugger());<br />

Listing<br />

22-6<br />

If you need to use multiple list<strong>en</strong>ers you can use addList<strong>en</strong>er().<br />

$conn->addList<strong>en</strong>er(new MyDebugger());<br />

$conn->addList<strong>en</strong>er(new MyLogger());<br />

Listing<br />

22-7<br />

Pre and Post Connect<br />

All of the below list<strong>en</strong>ers are invoked in the <strong>Doctrine</strong>_Connection class. And they are all<br />

passed an instance of <strong>Doctrine</strong>_Ev<strong>en</strong>t.<br />

Methods List<strong>en</strong>s Params<br />

preConnect()<br />

connection()<br />

postConnect() connection()<br />

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

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

Saved successfully!

Ooh no, something went wrong!