Anotace metody pro transakce

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kutilm
Člen | 21
+
0
-

Ahoj,
chtěl bych zkusit napsat anotaci, která by zajistila, aby se všechny volání na databázi v metodě prováděla v transakci. Třeba nějak takhle:

<?php
class MyModel extends Object
{
/**
 * @dbTransaction
 */
 public function myMethod()
 {
    ...
 }
?>

Bohužel mi uniká hodně věcí kolem anotaci a tak nevím jak zajistit, aby se kód spustil před voláním myMethod. Jde to vůbec? Co jsem si tak zkoušel jednu obsluhu anotace, tak to bylo pro signály, a tam jsem volal vše ručně přes metodu signalReceived.

Druhou otázkou je, jak pak takovou anotaci vůbec rozumně implementovat, nicméně zatím jsem se nedostal ani k tomu jak ji zavolat, takže to budu řešit pak.

Děkuji Michal

bazo
Člen | 620
+
0
-

no ja napriklad pouzivam autoamticke cachovanie vysledku funkcie modelu, pouzivam na to __call(), s tym, ze funkcie v modeli maju prefix _getNieco(), a volam ich $model->getNieco.

a anotaciu si zistis

$method = $this->reflection->getMethod($method_name);
$method->getAnnotation('anotacia')
redhead
Člen | 1313
+
0
-

Používám přesně to samé, co bazo, s __call() a prefixem (u mě c_getBla())

// Problém je akorát, že ti IDE nenabízí ty funkce při psaní

Editoval redhead (17. 4. 2010 10:49)

Honza Kuchař
Člen | 1662
+
0
-

ale promenné se dají simulovat pomocí anotace @property u třídy. ;-)

Panda
Člen | 569
+
0
-

A metody volané přes __call() zase pomocí anotace @method.

kutilm
Člen | 21
+
0
-

Vida přes __call() mě to nenapadlo, dík. Jen je škoda, že budu muset upravit (přidat podtžítka) ke všem metodám co to potřebují, ale to se dá přežít. Jo a dík za ty finty s @method pro IDE, to se hodí.