use PsrHttpMessageResponseInterface;
use PsrHttpMessageServerRequestInterface;
use PsrHttpServerRequestHandlerInterface;
use LaminasDiactorosResponseJsonResponse;
class UserListHandler implements RequestHandlerInterface {
public function __construct(private UserRepository $repo) {}
public function handle(ServerRequestInterface $request): ResponseInterface {
$params = $request->getQueryParams();
$page = (int)($params["page"] ?? 1);
$users = $this->repo->paginate($page, 10);
return new JsonResponse(["data" => $users, "page" => $page]);
}
}
class CreateUserHandler implements RequestHandlerInterface {
public function handle(ServerRequestInterface $request): ResponseInterface {
$data = $request->getParsedBody();
// validate...
$user = $this->repo->create($data);
return new JsonResponse(["data" => $user], 201);
}
}
// Error response
return new JsonResponse(["error" => "Not found"], 404);
// Content negotiation middleware
$app->pipe(ContentTypeMiddleware::class); // set Accept/Content-Type headers