Skip to main content

Response Classes

The OpenRegister application uses a hierarchy of response classes to handle different types of object operations. These classes provide a consistent interface for working with single objects, multiple objects, and their related data.

Class Hierarchy​

ObjectResponse
├── SingleObjectResponse
└── MultipleObjectResponse

ObjectResponse​

The base response class that provides common functionality for all object responses.

Properties​

protected array $data;        // The response data
protected ?int $page = null; // Current page number
protected ?int $limit = null; // Items per page
protected ?int $total = null; // Total number of items

Methods​

Constructor​

public function __construct(array|ObjectEntity $data)

Creates a new response instance with the given data.

Pagination​

public function paginate(
int $page = 1,
?int $limit = 10,
?int $total = null
): self

Paginates the response data.

Download​

public function download(string $format): string

Downloads the data in the specified format (json, xml, csv, excel).

Get Data​

public function getData(): array

Returns the response data with optional pagination metadata.

Protected Methods​

protected function downloadJson(array $normalizers): string
protected function downloadXml(array $normalizers): string
protected function downloadCsv(array $normalizers): string
protected function downloadExcel(): string

SingleObjectResponse​

Response class for single object operations, extending ObjectResponse.

Properties​

private GetObject $getHandler;    // Handler for fetching related data
private ObjectEntity $object; // The object entity

Methods​

Constructor​

public function __construct(ObjectEntity $object, GetObject $getHandler)

Creates a new single object response.

Get Relations​

public function getRelations(): ObjectResponse

Returns related objects for the current object.

Get Logs​

public function getLogs(): ObjectResponse

Returns logs for the current object.

Get Object​

public function getObject(): ObjectEntity

Returns the object entity.

MultipleObjectResponse​

Response class for multiple object operations, extending ObjectResponse.

Properties​

private GetObject $getHandler;    // Handler for fetching related data

Methods​

Constructor​

public function __construct(array $objects, GetObject $getHandler)

Creates a new multiple object response.

Get Relations​

public function getRelations(): ObjectResponse

Returns related objects for all objects in the collection.

Get Logs​

public function getLogs(): ObjectResponse

Returns logs for all objects in the collection.

Usage Examples​

Single Object Operations​

// Get an object with its relations
$response = $objectService->getObject($uuid);
$relations = $response->getRelations()->paginate(1, 10);

// Get object logs
$logs = $response->getLogs()->paginate(1, 10);

// Download object data
$jsonData = $response->download('json');

Multiple Object Operations​

// Get multiple objects
$response = $objectService->getObjects(['status' => 'active']);

// Get relations for all objects
$relations = $response->getRelations()->paginate(1, 10);

// Get logs for all objects
$logs = $response->getLogs()->paginate(1, 10);

// Download all objects
$csvData = $response->download('csv');

Pagination Example​

$response = $objectService->getObjects()
->paginate(
page: 2,
limit: 25,
total: 100
);

$data = $response->getData();
// Returns:
// [
// 'data' => [...],
// 'pagination' => [
// 'page' => 2,
// 'limit' => 25,
// 'total' => 100,
// 'pages' => 4
// ]
// ]

Best Practices​

  1. Use the appropriate response type for your operation
  2. Always handle pagination for large datasets
  3. Consider memory usage when working with multiple objects
  4. Use type hints in your code
  5. Handle download formats appropriately
  6. Chain methods in a logical order
  7. Use error handling when working with responses

Error Handling​

try {
$response = $objectService->getObject($uuid);
$data = $response->download('json');
} catch (Exception $e) {
// Handle download error
}

try {
$response = $objectService->getObjects()
->paginate(1, 10);
} catch (Exception $e) {
// Handle pagination error
}