Trigger für Generischer OR Mapper

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
majorbenks
Beiträge: 1
Registriert: 23.06.2011, 19:41:03

Trigger für Generischer OR Mapper

Beitrag von majorbenks » 23.06.2011, 19:49:54

Hallo zusammen

Ich beschäftige mich grad ein bisschen mit apf und bin dabei auf den OR Mapper gestossen. Aber dazu habe ich eine Frage: Gibt es beim OR Mapper Trigger? Damit meine ich: kann ich während dem Speicherprozess irgendwelche Validierungen machen, bei welchem ich das zu speichernde Objekt unter Umständen anpassen oder den Speicherprozess abbrechen kann? Beispiel: Ich habe einen Webshop und bestimme, dass der Mindesteintrag 20€ sein muss. Beim speichern möchte ich nun prüfen, ob der Gesamtwert der Bestellungen im Objekt "Bestellung" mehr als 20€ ist. Wenn nicht breche ich die Speicherung mit einer entsprechenden Meldung ab. Wie kann man so etwas machen?

Besten Dank für die Antwort
Mfg Benks

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Trigger für Generischer OR Mapper

Beitrag von Screeze » 23.06.2011, 20:07:45

Hi, und willkommen im APF-Forum ;)

Direkte "Trigger" gibt es nicht wie du sie möchtest. Allerdings haben wir in der aktuellen Entwicklungsversion (1.14) so etwas ähnliches, was du möglicherweise dafür verwenden könntest.
Eigentlich besteht die Neuerung hier daraus, dass man statt des Generischen DomainObjects für ausgwählte Objekte nun eigene DomainObjects definieren kann. Diese können (derzeit) 3 Event-Methoden implementieren, welche aufgerufen werden, wenn bestimmte Aktionen getätigt werden. Und zwar:
  • Nach dem Laden aus der Datenbank
  • Vor dem Speichern in die Datenbank
  • Nach dem Speichern in die Datenbank
Dein verhalten könntest du denke ich erreichen, indem du die Methode beforeSave() hierfür verwendest, und im Falle, dass es nicht gespeichert werden soll, das ganze mit einer Exception abbrichst. Wenn du diese dort abfängst, wo du saveObject() aufrufst, kannst du anschließend eine Meldung erzeugen.
Soweit die Theorie, ausprobiert habe ich das Abbrechen durch Exception in diesem Falle noch nicht, aber es sollte funktionieren.

Dazu musst du allerdings die derzeitige Entwicklunsversion aus dem SVN verwenden, die sollte RELATIV stabil sein inzwischen, ich setze sie bereits längere Zeit ein.
Einziges Problem: Die aktualisierte Doku ist noch nicht online, lediglich im SVN zu finden. Aber wenn du mit weniger Formatierungen leben kannst, kannst du auch die bereits verwenden theoretisch.

Das aktuelle Paket aus dem SVN gibts hier: http://adventurephpfra.svn.sourceforge. ... /?view=tar

Die Doku im SVN zu diesem Feature findest du unter:
http://adventurephpfra.svn.sourceforge. ... iew=markup

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast