[3.0] GenericDomainObject in UmgtUser-Objekt wandeln

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
Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

[3.0] GenericDomainObject in UmgtUser-Objekt wandeln

Beitrag von dave » 01.09.2015, 09:46:13

Die Überschrift mag etwas komisch klingen, aber im Grunde geht es darum.

Für meine Datenbankanbindung arbeite ich mit dem GORM. Ein geniales Tool!
In meinem konkreten Fall geht es um folgendes: Ich speichere ein Objekt in Abhängigkeit zum User. Als erstes wird das Objekt gesichert, anschliessend stelle ich eine Association zwischen den beiden her:

Code: Alles auswählen

public function assignUser2Turnier(UmgtUser $User, $Turnier) {
    $this->orm->createAssociation('User2Turnier', $User, $Turnier);
} 
Ich übergebe dafür direkt ein UmgtUser-Objekt, wie es vom UMGT geliefert wird.

Wenn ich nun alle User ausgeben möchte, die den Objekt (im Fall "Turnier") angehören, mache ich das auch über den GORM:

Code: Alles auswählen

public function loadAllUserByAssUser2Turnier($Turnier) {
    return $this->orm->loadRelatedObjects($Turnier, 'User2Turnier');
} 
Allerdings erhalte ich nun kein UmgtUser-Objekt sondern ein GenericDomainObject. Das lässt sich allerdings nicht komplett in einem Rutsch entschlüsseln (alle Userdaten werden verschlüsselt hinterlegt).
Bisher habe ich es umständlich gelöst, indem ich anhand der User-ID über einen Aufruf vom UmgtManager den User geladen habe, dabei wird die Entschlüsselung ja direkt injeziert. Dieses zusätzliche Laden möchte ich mir aber sparen und einfach nur die Daten entschlüsseln.

Wahrscheinlich sehe ich gerade mal wieder den Wald vor Bäumen nicht, aber so ist das manchmal. Für Anregungen bin ich wie immer sehr dankbar :D

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [3.0] GenericDomainObject in UmgtUser-Objekt wandeln

Beitrag von dr.e. » 01.09.2015, 20:23:14

Hallo dave,

da sowohl das UMGT als auch deine Applikation auf dem GORM basieren kannst du genauso vorgehen wie du das auch schon tust. Kommt vom GORM lediglich der generische Datentyp GenericDomainObject zurück, so liegt das meiner Ansicht nach daran, dass deine Instanz des GORM das Mapping auf UmgtUser nicht kennt.

Das Mapping wird in der *_domainobjects.ini definiert und muss zu den in der *_objects.ini passen. Sofern nun alle deine GORM-Instanzen dieselbe Konfiguration bzw. die selben Konfigurationen laden und damit kennen kannst du ohne weiteres UmgtUser für deine Applikation über den UmgtManager nutzen.

Da die GORM-Instanz für den UmgtManager per Dependency-Injection erzeugen lässt kannst du die gleiche Instanz auch für deine Applikation nutzen.

Hoffe das hilft dir weiter! Falls du noch Fragen zur Erzeugung hast, kannst du dir http://adventure-php-framework.org/Seit ... s-Services und http://adventure-php-framework.org/Seit ... ung-via-DI ansehen. Falls das deine Fragen nicht beantwortet, lass es mich gerne wissen! :)
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.0] GenericDomainObject in UmgtUser-Objekt wandeln

Beitrag von dave » 03.09.2015, 11:24:58

Hallo Christian,
deine Ausführungen haben mich bereits etwas weiter gebracht.
Bisher habe ich die UMGT-Konfiguration (also eigentlich nur die Datenbank-Tabellen) über eine zusätzliche Mapping- sowie Relation-Definition via GenericORMapperDIMappingConfiguration und GenericORMapperDIRelationConfiguration aus meiner Konfiguration heraus (*.serviceobjects.ini) in meinen Manager geladen. Damit konnte ich dann schon wunderbar Beziehungen zwischen einem User (aus dem UMGT) und einem Turnier (aus meinem Manager) herstellen.

Nun habe ich die Konfiguration etwas angepasst:
Statt zusätzlichen Mapping- und Relation-Konfiguration nutze ich nun den GenericORMapperDIDomainObjectsConfiguration. (http://wiki.adventure-php-framework.org ... gurationen).

Code: Alles auswählen

[GORM]
servicetype = "SINGLETON"
class = "APF\modules\genericormapper\data\GenericORRelationMapper"
setupmethod = "setup"
conf.namespace.method = "setConfigNamespace"
conf.namespace.value = "DATA\WEB"
conf.debug.method = "setLogStatements"
conf.debug.value = "true"
conf.db.method = "setConnectionName"
conf.db.value = "DB4"

; Mapping-Tables
init.map-1.method = "addDIMappingConfiguration"
init.map-1.namespace = "DATA\WEB"
init.map-1.name =  "poker-MAPPING"
init.rel-1.method = "addDIRelationConfiguration"
init.rel-1.namespace = "DATA\WEB"
init.rel-1.name =  "poker-RELATION"

; UMGT 
init.do.method = "addDIDomainObjectsConfiguration"
init.do.namespace = "DATA\WEB"
init.do.name =  "GORM-CONFIG-ADDITIONAL-SERVICEOBJECTS"

...
...
...

[GORM-CONFIG-ADDITIONAL-SERVICEOBJECTS]
servicetype = "NORMAL"
class = "APF\modules\genericormapper\data\GenericORMapperDIDomainObjectsConfiguration"
conf.namespace.method = "setConfigNamespace"
conf.namespace.value = "APF\modules\usermanagement\data"
conf.affix.method = "setConfigAffix"
conf.affix.value = "umgt"
Klappt soweit auch erstmal, das UMGT ist einwandfrei nutzbar. Wenn ich nun allerdings etwas in Beziehung zum User (zum Beispiel seine Turniere) laden möchte, erhalte ich einen Error:
Undefined index: User
.../APF/modules/genericormapper/data/GenericORRelationMapper.php
Lasse ich mir nun aber mal im Aufruf $User ausgeben, ist es ein UmgtUser Objekt. Soweit also auch Ok, allerdings stellt sich jetzt der GORM etwas quer. Wie kann ich denn ein Domänen-Objekt in meine Konfiguration holen, also injizieren? Das habe ich bisher noch nicht verstanden, konnte das auch nicht so wirklich beim UMGT nachvollziehen.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [3.0] GenericDomainObject in UmgtUser-Objekt wandeln

Beitrag von dr.e. » 03.09.2015, 20:56:12

Hi dave,

schön, dass du schon einen Schritt weiter gekommen bist.
Statt zusätzlichen Mapping- und Relation-Konfiguration nutze ich nun den GenericORMapperDIDomainObjectsConfiguration. (http://wiki.adventure-php-framework.org ... gurationen).
Das klingt schon mal gut!
Wie kann ich denn ein Domänen-Objekt in meine Konfiguration holen, also injizieren? Das habe ich bisher noch nicht verstanden, konnte das auch nicht so wirklich beim UMGT nachvollziehen.
Domänen-Objekte werden immer dann automatisch gemappt, wenn die notwendige Konfiguration vorhanden ist. Bedeutet, dass du sowohl ein addDIDomainObjectsConfiguration() für das UMGT brauchst als auch für deine Applikation. In Summe sollte deine Konfiguration wie folgt aussehen:

Code: Alles auswählen

[GORM]
servicetype = "SINGLETON"
class = "APF\modules\genericormapper\data\GenericORRelationMapper"
setupmethod = "setup"
conf.namespace.method = "setConfigNamespace"
conf.namespace.value = "DATA\WEB"
conf.debug.method = "setLogStatements"
conf.debug.value = "true"
conf.db.method = "setConnectionName"
conf.db.value = "DB4"

; UMGT
init.map-1.method = "addDIMappingConfiguration"
init.map-1.namespace = "APF\modules\usermanagement\data"
init.map-1.name =  "UMGT-MAPPING"

init.rel-1.method = "addDIRelationConfiguration"
init.rel-1.namespace = "APF\modules\usermanagement\data"
init.rel-1.name =  "UMGT-RELATION"

init.do-1.method = "addDIDomainObjectsConfiguration"
init.do-1.namespace = "APF\modules\usermanagement\data"
init.do-1.name =  "UMGT-DOMAIN"

; APP
init.map-2.method = "addDIMappingConfiguration"
init.map-2.namespace = "DATA\WEB"
init.map-2.name =  "poker-MAPPING"

init.rel-2.method = "addDIRelationConfiguration"
init.rel-2.namespace = "DATA\WEB"
init.rel-2.name =  "poker-RELATION"

init.do-2.method = "addDIDomainObjectsConfiguration"
init.do-2.namespace = "DATA\WEB"
init.do-2.name =  "poker-DOMAIN"

[UMGT-MAPPING]
...

[UMGT-RELATION]
...

[UMGT-DOMAIN]
...

[poker-MAPPING]
...

[poker-RELATION]
...

[poker-DOMAIN]
...
Kurz zusammengefasst: für sowohl das UMGT als auch für deine Applikation muss der GORM die Objekte, deren Beziehungen und die Domänen-Objekte kennen.

Hoffe damit kommst du weiter. Falls nicht, poste mir gerne mal die Details der Fehlermeldungen. In deinem Post fehlte leider die Zeile, ich habe mich daher mit der Suche etwas schwer getan.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.0] GenericDomainObject in UmgtUser-Objekt wandeln

Beitrag von dave » 04.09.2015, 10:11:56

Hallo Christian,
mit deinen Ausführungen habe ich es hinbekommen und verstanden. Ich dachte, dass ich nur das Domänen-Objekt in der Konfiguration benötige, und der GORM damit dann schon die Mappings und Relations findet. So macht es aber auch Sinn. Ich werde das Beispiel im Wiki dazu nochmal etwas verbessern, dort ist es nämlich mit dem Domänen-Objekt so nicht ersichtlich.

Wie immer, vielen Dank, erstklassige Arbeit :)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [3.0] GenericDomainObject in UmgtUser-Objekt wandeln

Beitrag von dr.e. » 04.09.2015, 10:42:01

Super! :)
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste