<?php
/**
* Example 12 — Driver Registry & Multiple Drivers
*
* Shows how to use the DriverRegistry to register and switch between
* different datatable drivers. This is useful when your application
* needs to support multiple JS libraries or custom renderers.
*/
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use Italix\DataSets\DataSet;
use Italix\DataSets\Drivers\DriverInterface;
use Italix\DataSets\Drivers\DriverRegistry;
use Italix\DataSets\Drivers\Tabulator\TabulatorDriver;
// ============================================================================
// Register available drivers
// ============================================================================
$registry = new DriverRegistry();
$registry->register(new TabulatorDriver());
// You could register additional custom drivers:
// $registry->register(new AgGridDriver());
// $registry->register(new DataTablesDriver());
// ============================================================================
// Use by name (e.g. from a config file or user preference)
// ============================================================================
$driver_name = 'tabulator'; // Could come from config: $config['datatable_driver']
if ($registry->has($driver_name)) {
$driver = $registry->get($driver_name);
} else {
throw new RuntimeException("Unknown datatable driver: {$driver_name}");
}
$ds = new DataSet($usersTable);
$ds->columns(['name', 'email']);
$ds->ajax_url('/api/users');
$config = $ds->render($driver);
$json = $ds->to_json($driver);
// ============================================================================
// Implementing a custom driver
// ============================================================================
/*
* To create your own driver, implement DriverInterface:
*
* class MyCustomDriver implements DriverInterface
* {
* public function get_name(): string
* {
* return 'my-custom';
* }
*
* public function render(DataSet $dataset): array
* {
* $config = [];
*
* // Map DataSet configuration to your library's format
* foreach ($dataset->each_column() as $name => $col) {
* $config['fields'][] = [
* 'key' => $col->get_name(),
* 'label' => $col->get_label(),
* // ... your library's column options
* ];
* }
*
* if ($dataset->get_ajax_url() !== null) {
* $config['dataSource'] = $dataset->get_ajax_url();
* }
*
* return $config;
* }
* }
*
* $registry->register(new MyCustomDriver());
*/