1

使用联盟/分形,我正在尝试将数据从数组转换为我的 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

4

1 回答 1

1

FractalManagerResourceInterface想要一个作为第一个参数的实例。所以你只想像这样改变你的代码

$data = new Collection([ 'name' => 'foo', 'message' => 'bar' ]);
$this->fractalManager->createData($data, new StatusDeserializer());
于 2017-11-14T22:07:56.880 回答