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 に答える