Использовать фрактал для декодирования из массива в пользовательский объект PHP

Используя Лигу / Фрактал, я пытаюсь преобразовать данные из массива в мой объект PHP... следующим образом

final class StatusDeserializer extends AbstractTransformer
{


    public function transform(Status $status)
    {
        return new StatusObject(
            $status['name'],
            $status['message']
        );
    }
}

мое определение объекта

final class StatusObject
{

    private $name;
    private $message;

    public function __construct($name, $message)
    {
        $this->name = $name;
        $this->message = $message;
    }
}

тестовая реализация здесь

$data = [ 'name' => 'foo', 'message' => 'bar' ]
$this->fractalManager->createData($data, new StatusDeserializer());

Но я получаю эту ошибку

Fatal error: Uncaught TypeError: Argument 1 passed to League\Fractal\Scope::filterFieldsets() must be of the type array, object given

Редактировать 1

Я попытался обернуть массив в коллекцию Fractals, т.е.

$data = new Collection([ 'name' => 'foo', 'message' => 'bar' ]);

и теперь он возвращает экземпляр League\Fractal\Scope вместо моего экземпляра StatusObject

Редактировать 2

Добавление ->toArray() вернул меня к первой ошибке

$this->fractalManager->createData($data, new StatusDeserializer())->toArray();

см. снимок экрана: https://gmkr.io/s/5a0b755c683d0d77313ff0fa/0

1 ответ

FractalManager хочет экземпляр ResourceInterface в качестве первого аргумента. Так что вы просто хотите изменить свой код следующим образом

$data = new Collection([ 'name' => 'foo', 'message' => 'bar' ]);
$this->fractalManager->createData($data, new StatusDeserializer());
Другие вопросы по тегам