neomerx / json-api

Framework agnostic JSON API (jsonapi.org) implementation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Support interface/superclass based mapping in SchemaContainer

samizdam opened this issue · comments

Case: I have multiple implementation for my entity interface and one schema for all it.

Now SchemaContainer

  • use class_exists(), but not interface_exists()
  • use get_classs() for check instance type - and known only about last class from object class parents

New logic for support interface/superclass in map for encoder should check class hierarchy in entries.

Now I need create proxy for all resource and wrap all data entries in my request handler.
Another possible ugly way - write every final implementation to encoder map with dublicated schema. Manual to config file, or generate by some rules (scan sources, annotations, etc). 20-50 entries in my case.

I had to create a subclass of SchemaContainer containing this:

    public function register(string $type, $schema): void
    {
        if (true === empty($type) || (false === \class_exists($type) && false === \interface_exists($type))) {
            throw new InvalidArgumentException(_(static::MSG_INVALID_MODEL_TYPE));
        }
    // …

But I would prefer to not have to do this as well.