14 Reaktionen zu “Signal / Slot Pattern – Türchen 15”

Kommentare abonnieren (RSS) oder TrackBack URL

Das ist extbase 1.4, das mit TYPO3 4.6 ausgeliefert wird, wenn ich das richtig verstanden habe? Sieht ja sehr vielversprechend aus, danke für den Artikel.
Er wäre allerdings leichter lesbar, wenn Du mal die Rechtschreibfehler korrigierst und noch einmal gegenliest 😉 Ist nicht bös gemeint, aber das Ganze liest sich doch sehr holprig.

Viele Grüsse
Anja

Anja am 15. Dezember 2011 um 12:05

Nützlich wäre noch ein Beispiel, in dem man Daten einer bestehenden Funktion nachträglich manipuliert. Der connect-Methode müssen dann die Parameter ggf. als Referenz übergeben werden.

Lars am 15. Dezember 2011 um 20:32

Was mit hier noch fehlt ist, wie dafür gesorgt wird, dass der Connect auch ausgeführt wird. Wie erreiche ich, dass meine Extension sich in an ein Signal hängt?

Sebastian am 19. Dezember 2011 um 14:40

Wie bei den Hooks auch, müssen die Slots registriert werden, bevor das Signal gesendet wird. d.h. hierfür würde sich u.a. die ext_localconf.php Datei eignen… Grüße, Tim

Tim Lochmüller am 19. Dezember 2011 um 17:04

Ich hab versucht, das ganze mal auszuprobieren, aber der connect in der ext_localconf.php klappt nicht. Da wird ne Exception geworfen, dass der ‚extbase_object‘ cache nicht existiert. Versuche den Dispatcher wie bei blog.foertel.com per ObjectManager zu holen.

$signalSlotDispatcher = t3lib_div::makeInstance(‚Tx_Extbase_Object_ObjectManager‘)->get(‚Tx_Extbase_SignalSlot_Dispatcher‘);

Hat das evtl. jemand schon erfolgreich hinbekommen?
Gruß, Tobias

Tobias am 21. Dezember 2011 um 18:29

Kaum fragt, hat man die Lösung. Einfach nicht über den ObjectManager instanziieren und es geht 🙂

$signalSlotDispatcher = t3lib_div::makeInstance(‘Tx_Extbase_SignalSlot_Dispatcher’);

Tobias am 21. Dezember 2011 um 18:40

Vermute der Autoloader ist nicht geladen. Benutzt du noch 4.5.x? Du musst das Object über den ObjectManager erstellen, da sonst die DependencyInection nicht funktioniert, welche in dem SignalSlotDispatcher gebraucht wird?!? Grüße, Tim

Tim Lochmüller am 21. Dezember 2011 um 22:21

Ich nutze 4.6.1(-3). Die Exception wurde schon vom ObjectManager (nicht direkt) geworfen, weil er die gesuchte Instanz erst im Cache suchte, der nicht existierte. Daher die Exception. Den SignalSlotDispatcher einfach mit „makeInstance“ zu laden, funktioniert in diesem Fall, da die Connect-Methode nur ein internes Array füllt. Und später auf die gleiche Instanz (da Singleton) wieder zugegriffen wird.
Über den ObjectManager wäre es wohl „richtiger“, aber das scheint ja aktuell nicht zu gehen.

Tobias am 22. Dezember 2011 um 10:52

OK… kenne die interne das ObjectManager nicht genau. Glaube aber das der ObjectManager die Dependency-Injection für sich selbst (siehe Klasse SignalSlotDispatcher) nicht erneut durchführt und einfach das bereits erzeugte Singelton zurück gibt. Vielleicht dann lieber den ObjectManager von Hand injecten, sodass nicht u.a. diese Exception fliegt (Cannot dispatch %s::%s to class %s. The object manager is not yet available in the Signal Slot Dispatcher and therefore it cannot dispatch classes.)….

Tim Lochmüller am 22. Dezember 2011 um 13:20

Danke für den Artikel. Es fällt mir immer etwas leichter es in Deutsch zu lesen.
wg Anja – Mir ist es lieber du schreibst mehr mit Rechtschreibfehler als weniger ohne 😉

KimPixel am 08. Februar 2012 um 23:06

Btw: If you find something like „__FUNCTION__“ instead of the signalname the signalname is the same as the function-name in which the dispatcher-object is instantiated. (So it’s the same as with „__CLASS__“ from above).

Michael am 08. Oktober 2013 um 14:47
Trackbacks & Pingbacks

[…] Der TYPO3-Adventskalender bespricht heute das “Signal/Slot-Pattern“. […]

Pingback von Adventskalender am 15. Dezember « F-LOG-GE am 15. Dezember 2011 um 11:48
Pingback von Hook mit ExtBase implementieren am 18. Dezember 2012 um 16:34

[…] Signal Slots (nur Extbase Erweiterungen – auch nicht hier beschrieben. Ausführliche Beschreibung gibt es auf TYPO3Blogger.de) […]

Kategorien

Archiv