If you want to map API responses directly to your own domain objects or a specific subset of properties, you can use Resource Wrappers. A wrapper class extends ResourceWrapper and allows you to transform raw API data into dedicated objects using Utility::transform().
Defining a Wrapper
To create a wrapper, implement a fromResource static method. This method should take the API resource, transform the necessary fields, and call setWrapped($resource) to maintain access to the underlying API resource.
Using a Wrapper
To use your custom wrapper, you must tell the Request object to hydrate into your wrapper instead of the default resource by using setHydratableResource() with a WrapperResource instance.
// 1. Define the wrapper
use Mollie\[Api\\Utils\\Utility;
use Mollie\[Api\\Resources\\Payment;
use Mollie\[Api\\Resources\\ResourceWrapper;
class PaymentWrapper extends ResourceWrapper
{
public function __construct(
public Money $amount,
public Timestamp $createdAt,
) {}
public static function fromResource($resource): self
{
/** @var Payment $resource */
return (new self(
amount: Utility::transform($resource->amount, fn (stdClass $amount) => Money::fromMollieObject($amount)),
createdAt: Utility::transform($resource->createdAt, fn (string $timestamp) => Timestamp::fromIsoString($timestamp))
))->setWrapped($resource);
}
}
// 2. Use the wrapper in a request
use Mollie\[Api\\Resources\\WrapperResource;
$request = new GetPaymentRequest('tr_*********');
$request->setHydratableResource(new WrapperResource(PaymentWrapper::class));
/** @var PaymentWrapper $paymentWrapper */
$paymentWrapper = $mollie->send($request);
// 3. Access properties or methods
echo $paymentWrapper->status; // property
echo $paymentWrapper->status(); // method