使用fractal从数组解码到自定义PHP对象

时间:2017-11-14 21:47:57

标签: php thephpleague-fractal

使用League / fractal,我试图将数据从数组转换为我的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 个答案:

答案 0 :(得分:1)

FractalManager想要ResourceInterface的实例作为第一个参数。所以你只想改变你的代码

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