Add-Presenter¶
Der Add-Presenter \Alvine\Application\Web\Presenter\Data\Add
ist von \Alvine\Application\Web\Presenter\Data\Object
abgeleitet und
stellt Methoden für die bearbeitung von POST
Anfragen bereit. Für die DELETE
, GET
, HEAD
, PUT
und PATCH
Methoden ist ein eigener
Object-Presenter verantwortlich.
Die Steuerung, welcher View zur Anwendung kommt, erfolgt über den vom Client mitgesendeten Accept
-Header. Hier ist entweder
application/json
oder text/html
möglich. Für die HTML-Ausgabe ist der Standardview des Presenters - wenn keiner über
die Konfiguration angegeben wird - die von der Methode Object::getDefaultViewClass()
zurückgegebene Klasse.
Der View kann auch über die Konfiguration in der Route definiert werden.
Hinweis
Sie müssen sicherstellen das Ihr View das Interface \Alvine\Application\Web\View\InstanceFromContainer
implementiert.
Objekt hinzufügen¶
Über die POST
Anfrage können ein oder mehrere Objekte hinzugefügt werden. Als Ergebnis wird entweder der Status 204 No Content
oder wenn JSON unterstützt wird ein Array mit dem Ergebnis zurück gegeben. Über den Parameter whatif
kann die Anfrage
simuliert werden.
Parmater | Beschreibung |
---|---|
whatif | Anfrage nur flüchtig, ohne echte Aktion durchführen |
Wird in der Route eine Redirect-URL definiert, so wird diese bei der Änderung eines Datensatzes per Location
Header
an den Client übergeben. Bei der Rückgabe von JSON oder mehreren Änderungen ist die Location in der Antwort enthalten.
In dem folgenden Beispiel werden die zwei Datensätze hinzugefügt.
curl --request POST \
--url 'http://example.com/api/object' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{
"dataset": [
{
"name": "Neuer Name",
},
{
"flag":2,
}
]
}'
Im Erfolgsfall ist das Ergebnis folgendes JSON
{
"dataset": [
{
"dataset": {
"id": 2,
"name": "Neuer Name",
"flag": 5,
},
"sys": {
"created": "2017-10-21T16:15:35",
"message": "200 OK",
"code": 200
}
},
{
"dataset": {
"id": 5,
"name": "Alter Name",
"flag": 2,
},
"sys": {
"created": "2017-10-21T16:15:35",
"message": "200 OK",
"code": 200
}
}
]
}
In diesem Beispiel wurde ein Datensatz geändert und beim zweiten Datensatz ist ein Fehler aufgetreten (die angegebene ID gibt es nicht; 404).
{
"dataset": [
{
"dataset": {
"id": 5,
"name": "Alter Name",
"flag": 2,
},
"sys": {
"updated": "2017-10-21T16:30:31",
"message": "200 OK",
"code": 200,
"location": ""
}
},
{
"sys": {
"error": {
"code": 404,
"message": "404 Not Found"
}
}
}
],
"sys": {
"error": {
"code": 400,
"message": "400 Bad Request"
}
}
}
Werden keine oder falsche Daten übertragen, so wird folgende Fehlermeldung zurückgegeben:
{
"sys": {
"error": {
"code": 400,
"message": "400 Bad Request"
}
}
}
Konfiguration der Route¶
Objekte können über folgende Konfiguration verarbeitet werden.
Wichtig ist hier, dass der Parameter dataset
definiert ist.
<route id="ROUTE-ID-ADD">
<method>POST</method>
<presenter>MyPresenter</presenter>
<pattern><![CDATA[^\/api\/object$]]></pattern>
<template><![CDATA[/api/object]]></template>
<parameters>
<parameter name="dataset" type="ArrayType" />
</parameters>
<configuration>
<model> <!-- Klassenname des Models -->
<class>MyModel</class>
</model>
</configuration>
</route>
Ein Redirect kann über den Linksbereich in der Route definiert werden.
<route id="ROUTE-ID-ADD">
...
<links>
<!-- die ID der anzuwendende Route und die Relation "redirect" -->
<link route="ROUTE-ID-UPDATE" relation="redirect" />
</links>
</route>