Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Assoziative Arrays mit XML_RPC

Hallo Kollegen,

ich wollte einen XML_RPC bauen, bei dem ein assoziatives Array als Parameter verschickt wird. Nun habe ich in der Dokumentation von PEAR::XML_RPC gelesen, dass ich zwar Arrays einbringen kann, die dann als <struct> verpackt werden, allerdings müssen die Elemente des Arrays vom Typ XML_RPC_Value sein.

Verstehe ich das jetzt richtig, dass ich von Hand mein Array so umbauen muss (auch wenn es mehrdimensional ist)? Gibt es da keine Methode, die das für mich übernehmen kann? Das würde mich doch sehr wundern, weil es doch eigentlich eine Standardaufgabe ist.

Oder mache ich da einen organisatorischen Fehler und man soll mehrdimensionale Arrays nicht verschicken?

Vielen Dank für eure Hilfe,
DonKojote

Hier gehts zum Orginal Eintrag "Assoziative Arrays mit XML_RPC" im Forum

Antworten

Erzeuge ein "leeres" Object und benuetzte die addArray() Methode um es zu fuellen:

Code:                   In Zwischenablage kopieren (nur IE)
1">

Steht jedenfalls so in der Dokumentation ;)


2.

Also ich finde, dass man das auch anders verstehen kann. Hast du damit schon gearbeitet? Vermutlich ist es wirklich das, was ich brauche, ich werde es mal ausprobieren.

Danke!


3.

Jetzt, wo Du's sagst... Stimmt, das ist nicht eindeutig. Selber hab ich's glaub ich noch nicht benutzt...

Nee, nee, Ich korrigier mich hier mal selbst. Ein Array in PHP ist etwas voellig anderes als in XML-RPC. Du kannst meinen Vorschlag von eben gern testen, aber Deine Befuerchtung ist hoechstwahrscheinlich richtig: Du musst das Array umstaendlich konvertieren... Noch besser waer's natuerlich, Du wuerdest es von vornherein aus XML_RPC_Values zusammensetzen!


4.

Aber sag mal, warum benutzt Du nicht die XML-RPC Extension:

http://nl3.php.net/manual/de/ref.xmlrpc.php

Dann koenntest Du auch ganz komfortabel die xmlrpc_encode() Funktion benutzen...


5.

Hui, das beruhigt mich etwas, weil das Manual hier schon von zwei Leuten gelesen wurde und wir es beide anders verstanden hatten. Aber ist schon etwas komisch, dass die Funktion fehlt, oder? Hat vielleicht noch jemand anders damit gearbeitet? Ist natürlich kein großes Problem, das selbst zu schreiben, ist halt nur etwas komisch. Außerdem frage ich mich, ob ich da vielleicht auf dem Holzweg bin, weil das ein schlechter Stil ist.

Aber sonst werde ich es ausprobieren und selbst programmieren müssen.

Hat noch jemand anders Erfahrungsberichte für uns?


6.

Da steht:
Zitat:
Diese Erweiterung ist EXPERIMENTELL.
Hast du damit schon gearbeitet? Hat das noch Bugs? Problem ist bei uns, dass wir das auf jedem Server installieren müssten, das wäre mit PEAR etwas einfacher.

Würde eigentlich was dagegen sprechen, ein Array einfach zu serialisieren, dann als String zu verschicken und wieder zu deserialisieren? Ist wahrscheinlich sehr dirty, oder?


7.

Die Extension ist schon ein paar Jahre in der Entwicklung. Um Bugs wuerd ich mir also keine grosse Sorgen machen. Ein bisschen Testen muessen, wirst Du natuerlich schon! (Egal ob Du die PEAR Klasse oder die Extension benutzt :) )

Und Serialisieren halte ich fuer ne schlechte Idee. Dadurch stellst Du XML-RPC auf den Kopf. Das wuerde zwingend voraussetzen, dass der Client 1.) ebenfalls PHP benutzt und 2.) weiss, dass er noch einen Extraschritt gehen muss, um an die Daten zu kommen. Ein Grundgedanke von XML-RPC ist aber, dass Client und Server so wenig wie moeglich ueber ihre Implementierung wissen sollten.

Wenn Du aber 100% Kontrolle, sowohl ueber den Client/die Clients, als auch den Server hast, stellst sich die Frage, ob Du XML-RPC ueberhaupt brauchst. Dann koenntest Du genau so gut die Daten form-encoden und per POST schicken ;)


8.

Ok, das meinte ich mit Dirty. Das sehe ich vollkommen ein.

Die gesuchte Funktion haben wir mittlerweile gefunden. Ganz unten im Dokument steht folgendes:

Zitat:
Other Functions

Below are functions that lay outside the various XML_RPC objects.
XML_RPC_encode()

$rpc = XML_RPC_encode ($php_val)

Takes native php types and encodes them into XML_RPC PHP object format.
XML_RPC_decode()

$values = XML_RPC_decode ($XML_RPC_val)

Takes a message in PHP XML_RPC object format and translates it into native PHP types.
Danke für das inspirierende Gespräch, jetzt klappt es!


Hier gehts zum Orginal Eintrag "Assoziative Arrays mit XML_RPC" im Forum
 
phpforum.de | Impressum | Handy Bundles