Installation
composer require ano/data-grid
Ensure your project uses PHP 5.3+ and Twig 1.x (as per composer.json).
Basic Usage
require_once 'vendor/autoload.php';
use Ano\DataGrid\DataGrid;
$grid = new DataGrid();
$grid->setDataSource($yourDataArray); // Array of associative arrays
First Use Case: Rendering a Simple Table
$grid->setColumns([
'id' => ['title' => 'ID', 'width' => 50],
'name' => ['title' => 'Name', 'width' => 200],
]);
echo $grid->render();
Data Binding
setDataSource() with an array of associative arrays (e.g., from a database query).$users = User::all()->toArray();
$grid->setDataSource($users);
Column Configuration
$grid->setColumns([
'id' => ['title' => 'ID', 'width' => 50],
'email' => [
'title' => 'Email',
'width' => 250,
'callback' => function($value) {
return '<a href="mailto:'.$value.'">'.$value.'</a>';
}
],
]);
Pagination & Sorting
setPagination() and setSortableColumns():
$grid->setPagination(10); // Items per page
$grid->setSortableColumns(['id', 'name']);
Twig Integration
$grid->setTemplatePath(__DIR__.'/custom_grid.html.twig');
Server-Side Processing
setServerSide(true) to fetch data via AJAX (requires frontend JS integration).Laravel-Specific:
public function showGrid() {
$grid = new DataGrid();
$grid->setDataSource(User::paginate(10)->toArray());
return view('grid', ['grid' => $grid]);
}
{!! $grid->render() !!}
Dynamic Columns:
$columns = config('grid.columns');
$grid->setColumns($columns);
Localization:
trans filter.PHP 5.3 Legacy:
function($x) {} syntax.// ❌ Fails in PHP 5.3
$grid->setCallback(fn($x) => $x * 2);
// ✅ Works
$grid->setCallback(function($x) { return $x * 2; });
Twig Dependency:
composer require twig/twig:^1.27
Pagination Quirks:
setPagination() expects total items, not pages. For Laravel paginators, use:
$grid->setPagination(User::count());
$grid->setDataSource(User::paginate(10)->items());
Callback Scope:
'callback' => function($value) {
return htmlspecialchars($value, ENT_QUOTES);
}
No Laravel Service Provider:
DataGridServiceProvider). Register it manually in AppServiceProvider if needed:
$this->app->singleton(DataGrid::class, function() {
return new DataGrid();
});
Inspect Rendered HTML:
var_dump($grid->render()) to debug Twig output before rendering to the browser.Check Data Source:
setDataSource() receives an array of arrays (not objects or collections). Convert with:
$grid->setDataSource(User::get()->toArray());
Twig Errors:
$twig = new \Twig_Environment($loader, [
'debug' => true,
]);
Sorting Issues:
setSortableColumns() includes valid array keys from your data source.Custom Templates:
vendor/ano/data-grid/templates/default.html.twig) by copying it to your project and overriding paths.Add-ons:
$grid->setRowCallback(function($row, $index) {
return ['class' => $index % 2 ? 'odd' : 'even'];
});
{{ grid.toolbar }} block.Server-Side AJAX:
setServerSide(true) and handle requests in a controller:
public function gridData(Request $request) {
$grid = new DataGrid();
$grid->setServerSide(true);
$grid->setDataSource(User::query()->get());
return response()->json($grid->getServerSideData());
}
Export Features:
maatwebsite/excel.How can I help you explore Laravel packages today?