Automatic content negotiation. No magic. No bleeding into your code.
// Define a controller endpoint
class UserController extends Controller
{
public function __construct(private IUserService $users) {}
#[Get('/users/:id')]
#[AuthorizeRoles('admin')]
public function getUserById(int $id): User
{
return $this->users->getById($id);
}
}
// Bind your dependency
$container->bindInstance(IUserService::class, new UserService());
// Run an integration test
$this->assertParsedBodyEquals(new User(1, 'Dave'), $this->get('/users/1'));
Install Aphiria
composer create-project aphiria/app --prefer-dist --stability dev