Kein lokales Repository - Zugriff auf Webservice [Gelöst]

  • Kaimane Kaimane
    T3PO
    0 x
    20 Beiträge
    0 Hilfreiche Beiträge
    22. 06. 2011, 14:11

    Hallo liebe Typo3-Community.

    Ich habe in der Vergangenheit einige Erfahrungen in der Entwicklung "klassischer" Typo3-Ext sammeln können. Mittlerweile ist Extbase / Fluid in ja aller Munde, weshalb ich auf dieser Basis eine neue Extension entwickeln möchte.

    Anforderung ist es, Daten von einem Webservice abzuholen, aufzubereiten und auszugeben.
    Es müssen keine Daten in einer DB zwischengespeichert werden, sodass ein lokales Repository weg fällt.
    Um die Verbindung zum Webservice aufzubauen und die Daten abzuholen ist eine "Proxy"-Klasse mit verschiedenen Funktionen verfügbar, die den Query entgegennimmt und Ergebnisse zurückliefert.

    Meine Frage ist nun, wie binde ich die "Proxy"-Klasse (vllt als Repository) ein?
    Kennt ihr ähnliche Tutorials, Beispiele, Extensions, etc. wo eine solche Lösung schon umgesetzt ist (man muss das Rad ja nicht neu erfinden ;) )?

    Vielen Dank schon mal im Voraus!


  • 1
  • oliver_g oliver_g
    R2-D2
    0 x
    71 Beiträge
    0 Hilfreiche Beiträge
    22. 06. 2011, 16:24

    Ich befürchte ExtBase bietet dafür noch keinerlei Unterstützung. Ich denke du musst das selbst implementieren, also eine Dritt Bibliothek (Zend Framework z.B) einbinden und die Repositories links liegen lassen. Damit könntest du dann nur das V und das C des MVC Patterns nutzen, Model Engine musst selbst implementieren.

    Falls ich mich täusche, bitte ich um einen Hinweis ;-)

    Gruß

  • Kaimane Kaimane
    T3PO
    0 x
    20 Beiträge
    0 Hilfreiche Beiträge
    23. 06. 2011, 17:17

    Hallo Oliver,

    ich glaube, ich habe mich ein wenig falsch ausgedrückt.
    Die "Proxy"-Klasse ist schon vorhanden. Es ist eine "Zwischenschicht", über die auf den Endpunkt, also dem Webservice zugegriffen wird.

    Die Anforderung an die T3-Ext ist, die vorhandene Klasse (geschrieben in PHP) in die Ext einzubinden, den bestehenden Funktionen ein paar Werte zu übergeben und den Rückgabewert zu verarbeiten und auszugeben.

    Es soll also nicht der "Proxy" mittels Extbase neu aufgesetzt werden.

    Meine Frage war nun, wie die vorhandene Klasse in die T3-Ext eingeladen wird. Ich kann mir nämlich nicht vorstellen, dass ein einfaches

    1. require_once('proxy.php');
    2. class Tx_xyz_... extends Proxy_... {

    bei Extbase ausreicht.
    Also wenn jemand von euch einen Hinweis hierzu hat ... immer her damit ;)

    Liebe Grüße!

  • oliver_g oliver_g
    R2-D2
    0 x
    71 Beiträge
    0 Hilfreiche Beiträge
    24. 06. 2011, 14:08

    Hmm, weiß nicht genau ob ich verstehe was du meinst, aber du kannst deine Klasse ja in der ext_autoload.php anmelden und dann via t3lib_div::makeInstance instanziieren.

    Gruß

  • fragile74 fragile74
    Jedi-Ritter
    0 x
    125 Beiträge
    0 Hilfreiche Beiträge
    26. 06. 2011, 17:08

    warum bindest du die nicht in deine repository-klasse ein und definierst dann find-Methoden innerhalb des repositorys, auf die du komfortabel aus dem controller zugreifen kannst ? dafür ist ja die abstraktion da ;)

  • oliver_g oliver_g
    R2-D2
    0 x
    71 Beiträge
    0 Hilfreiche Beiträge
    27. 06. 2011, 08:01

    Ja aber wenn man die Funktionalität eines Repositorys nicht nutzt (da es das nun mal nicht kann), braucht man auch nicht so tun als würde man eines nutzen ;-)

  • Kaimane Kaimane
    T3PO
    0 x
    20 Beiträge
    0 Hilfreiche Beiträge
    27. 06. 2011, 16:06

    Hallo zusammen!

    Erst mal vielen Dank für eure zahlreichen Antworten.

    Der Hinweis von oliver_g
    [quote="oliver_g"]
    [...] aber du kannst deine Klasse ja in der ext_autoload.php anmelden und dann via t3lib_div::makeInstance instanziieren.
    [/quote]
    hat mir wunderbar geholfen. Instanziiert habe ich die externe "Proxy"-Klasse dann in der Controller-Klasse, in der ich auch die ganzen Abfragen starte.

    Das Repository sowie das Model fällt zur Zeit bei mir komplett weg, da ich keine Daten zwischenspeichern muss; daher besitzt die Extension auch keine DB-Tabelle. Die Konfiguration läuft ausschließlich über ext_conf_template.txt bzw. das Flexform.

    Aber vllt wäre es gar nicht so schlecht, eine Repository-Klasse mit verschiedenen Funktionen für den Zugriff auf den Webservice zu erstellen, da es im weiteren Verlauf mehrere Controller geben wird. Diese können ja dann alle unabhängig auf das Repo zugreifen, oder?

    Gibt es dabei etwas zu beachten?
    Kann ich vordefinierte find-Methoden benutzen und sie auf den Webservice bzw. auf die Proxy-Klasse umleiten? findAll() z.B. greift ja standardmäßig auf das entsprechende Model bzw. die interne DB zu.
    Oder wäre es hier sinniger eigene find-Methoden für die Datenabholung zu schreiben?

    Lieben Dank für eure Hilfe!

  • oliver_g oliver_g
    R2-D2
    0 x
    71 Beiträge
    0 Hilfreiche Beiträge
    29. 06. 2011, 15:49

    Hi, also um den Repository-Mechanismus benutzen zu können, müsstest du sehr viel Aufwand betreiben. ExtBase liefert momentan nur ein StorageBackend für Typo3 mit.

    Theoretisch könntest du ein StorageBackend auf Basis eines Webservices schreiben und dann einen eigenen Repository-Typ schaffen, aber warum so viel Aufwand treiben, wenn du deinen Proxy schon hast.

    Extbase ist halt leider noch nicht so flexibel wie z.B. das Zend Framework, da es ja nur ein teilweiser Backport des Flow3 Pakets ist.

    Falls ich falsch liege (bin nicht der Voll-Profi ;-) ) bitte ich um Korrektur.

    Gruß

  • Kaimane Kaimane
    T3PO
    0 x
    20 Beiträge
    0 Hilfreiche Beiträge
    29. 06. 2011, 21:17

    Hallo Oliver,

    dann sollte ich den weg ums Repository herum wählen ;)

    Ich danke dir für deine Erklärung!
    Viele Grüße ...

  • 1