Strukturfrage für eine Komponente

Hallo zusammen,

ich war nun eine Weile mit anderen Dingen beschäftigt, aber jetzt geht die Entwicklung weiter und ich brauch mal eure Hilfe.

Ich benötige einen vernünftigen Locking-Mechanismus für Objekte. Hab mich ein bisschen umgesehen und diesen sehr interessanten Artikel von David Perelman-Hall (siehe hier) gefunden. Es gibt auch bereits eine Implementierung auf dieser Basis von Fabio Ambrosanio (siehe hier).

Lange Rede, kurzer Sinn: ich möchte diese Implementierung (teilweise) nach Yii überführen und u.a. die Notwendigkeit herausnehmen, dass das HTML_AJAX PEAR-Paket installiert sein muss.

Nun grübel ich hier gerade so rum und komme nicht auf den Trichter, wie ich dass am saubersten umsetzen soll. Es gibt eine entsprechende Komponente, die hauptsächlich nur den passenden Treiber auswählt (nicht weiter wichtig) und die js registriert. Innerhalb der Seite, in der das Locking verwendet werden soll, müssen entsprechende Ajax-Funktionen eingebunden werden, die z.B. periodisch die festen Callback-Funktion des Servers aufrufen. Des Weiteren müssen auch noch benutzerdefinierte Callback-Funktionen aufgerufen werden können (z.B. wenn ein Lock bereits existiert und das Objekt nicht bearbeitet werden kann).

Jetzt zweifel ich gerade rum, ob sich das gut in einer Komponente lösen lässt (CComponent oder CApplicationComponent?) oder zusätzlich eines Widgets bedarf??

Ich brauche also eine Komponente, die ich am Anfang initialisiere, der ich benutzerdefinierte Callbacks angeben kann, die eine JS Bibliothek registiert und JS-Code in die entsprechende Seite einbindet. Dabei sollte ich für die Benutzer-Callbacks Zugriff auf den entsprechenden Controller haben und verwende am besten wohl auch dessen ID als Bestandteil der Locking IDs.

Ich weiß jetzt nicht so recht, wo ich am besten anfangen soll.

Alle Ideen sind willkommen!

Vielen Dank und schönen Gruß,

yoshi

Ja… ich weiß, das ist eine Menge Text und Zeit ist Geld. :D

Hat den keiner einen guten Rat für mich oder wird mein Vorhaben aus meiner Erläuterung nicht klar genug?

Danke und Gruß

Ja, leider tatsächlich etwas viel zum Lesen, konnts nur kurz überfliegen. Das ganze macht wohl einige AJAX-Requests, um das Locking abzuchecken und evtl. geänderte Daten upzudaten. Ich würd also wohl zu einem eigenen LockingController tendieren, der diese AJAX-Requests bearbeitet.

Evtl. ist es sinnvoll, einen Wrapper um CHtml zu legen (ähnlich wie das die jformvalidate Extension macht), das dann den nötigen JS-Code in deine Formulare automatisch mit einbindet:


<?php echo LHtml::beginForm() ?>

<?php echo LHtml::activeTextField($model,'name') ?>



Aber wiegesagt: Nur ein paar erste Gedanken. Evtl. regts dich ja zu ner besseren Lösung an ;)