Skip to content

Bug: REST v1 /v1/lieferadressen crasht mit Fatal Error (PHP 8.x Signatur-Inkompatibilität) #249

@Avatarsia

Description

@Avatarsia

Problem

Alle REST v1 Endpoints für Lieferadressen (/v1/lieferadressen) geben HTTP 500 zurück — GET, POST, PUT und DELETE sind betroffen. Der Fehler tritt beim Laden der Klasse auf, nicht erst beim Aufruf einer Methode.

Ursache

DeliveryAddressResource::insert() hat eine inkompatible Methoden-Signatur mit der Parent-Klasse:

// classes/Modules/Api/Resource/DeliveryAddressResource.php Zeile 124:
public function insert($inputVars)

// classes/Modules/Api/Resource/AbstractResource.php (Parent):
public function insert($inputVars, $inputMapping = null)

PHP 8.0+ erzwingt das Liskov-Substitution-Prinzip (LSP) und wirft einen Fatal Error wenn eine Child-Klasse eine Methode mit weniger Parametern überschreibt als die Parent-Klasse definiert:

Fatal error: Declaration of DeliveryAddressResource::insert($inputVars) 
must be compatible with AbstractResource::insert($inputVars, $inputMapping = null)

Da PHP den Fehler beim Autoloading der Klasse auslöst, sind alle Endpoints betroffen — nicht nur POST/INSERT.

Reproduktion

curl --digest -u "user:pass" "http://localhost/api/index.php/v1/lieferadressen"
# → HTTP 500: {"error":{"code":7499,"message":"Unexpected error"}}

curl --digest -u "user:pass" -X POST "http://localhost/api/index.php/v1/lieferadressen" \
  -H "Content-Type: application/json" \
  -d '{"name":"Test","adresse":"3","land":"DE"}'
# → HTTP 500: {"error":{"code":7499,"message":"Unexpected error"}}

Fix

Eine Zeile in classes/Modules/Api/Resource/DeliveryAddressResource.php:

- public function insert($inputVars)
+ public function insert($inputVars, $inputMapping = null)

Hinweis

Es gibt möglicherweise weitere Stellen im Codebase mit ähnlichen Signatur-Inkompatibilitäten, die unter PHP 7.x nur Warnings waren aber unter PHP 8.x zu Fatal Errors werden. Ein Projekt-weiter Check wäre sinnvoll:

grep -rn "public function insert(\$inputVars)" classes/Modules/Api/Resource/ 

Umgebung

  • OpenXE v1.12
  • PHP 8.1 (Ubuntu 22.04)
  • Betrifft alle PHP 8.0+ Installationen

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions