Attribut modelmode?

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
fliegermichl
Beiträge: 114
Registriert: 29.01.2008, 11:51:45
Wohnort: Echzell

Attribut modelmode?

Beitrag von fliegermichl » 21.11.2008, 11:35:16

Hallo,

einen Zusammenhang habe ich noch nicht so ganz kapiert. Deshalb schreibe ich das mal hier in FAQ.

Ich habe eine Action "SetTemplate" definiert.
In der Actionconfig habe ich
modelparams="param1:value1|param2:value2" usw stehen.

Die Action wird in der bootstrap Datei per "$fC->registerAction('sites::test', 'SetTemplate'" registriert.

die SetTemplate::run Methode fügt nun die Werte welche aus $this->__Input kommen per $Model->setAttribute in meine Modelklasse ein.

Verwende ich diese Modelklasse um dynamisch templates per <generic:importdesign> einzubinden, funktioniert das nur, wenn modelmode = "SINGLETON" ist. Ich möchte aber erreichen, daß ein einmal eingestellter Wert solange erhalten bleibt, bis ich diesen wiederum per "SetTemplate" Action ändere. Deshalb habe ich modelmode = "SESSIONSINGLETON" verwendet.

Jetzt meckert das Framework aber, daß die Modelklasse leere Werte liefert. Eine debugausgabe in der run Methode aber zeigt, daß die Action aufgerufen wird und auch die korrekten Werte in die Modelklasse schreibt.

Was mache ich da falsch?

Gruß
Michl

Benutzeravatar
fliegermichl
Beiträge: 114
Registriert: 29.01.2008, 11:51:45
Wohnort: Echzell

Re: Attribut modelmode?

Beitrag von fliegermichl » 21.11.2008, 15:37:30

Hallo,

einen Teil der Frage kann ich mir selbst beantworten. Ich muß das Model mit SessionSingleton::getInstance('MyModel') laden. leider verwendet er wenn die Action nicht aktiv per URL aufgerufen wurde nicht die zuletzt verwendeten Parameter sondern die aus der Actionconfiguration "modelparams".

Hmm, ratlos
Michl

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

Re: Attribut modelmode?

Beitrag von dr.e. » 21.11.2008, 15:48:03

Hallo Michl,

da du schon in FAQs gepostet hast noch ein Wort zu den Instanziierungsmethoden:
Das Framework beinhaltet als eine zentrale Komponente den ServiceManager. Dieser sort dafür, dass Klassen in der für das Framework korrekten Art und Weise erzeugt werden. Die Komponente ist eine Art abstract factory, die das Objekt in der gewünschte Weise erzeugt und mit dem relevanten Context und der aktuellen Sprache versorgt. Objekte können SINGLETON, SESSIONSINGLETON und NORMAL erzeugt werden. Für die ersten beiden Varianten werden die Singleton- und SessionSingleton-Klassen verwendet. Die Dokumentation zum Service-manager findet sich unter http://adventure-php-framework.org/Seit ... iceManager.

Verwende ich diese Modelklasse um dynamisch templates per <generic:importdesign> einzubinden, funktioniert das nur, wenn modelmode = "SINGLETON" ist. Ich möchte aber erreichen, daß ein einmal eingestellter Wert solange erhalten bleibt, bis ich diesen wiederum per "SetTemplate" Action ändere. Deshalb habe ich modelmode = "SESSIONSINGLETON" verwendet.

Da der Cache des ServiceManagers zwischen Objekte der Instanziierungsart SINGLETON und SESSIONSINGLETON unterscheidet, ist ein im Modus SESSIONSINGLETON erzeugtes Objekt nicht gleich dem im Modus SINGLETON erzeugten! Im Umkehrschluss muss deine Action, die das Model füllt, dieses auch im SESSIONSINGLETON-Modus erzeugen, wenn in deiner Tag-Definition ein SESSIONSINGLETON notiert ist. Im Quellcode deiner Action könnte dann folgendes stehen:

Code: Alles auswählen

$model = &$this->__getServiceObject('sites::test::biz::actions','SetTemplateAction','SESSIONSINGLETON');


Ich hoffe, das beantwortet die Frage und löst das Problem! :)


Viele Grüße,
Christian
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast