ansien/symfony-ag-grid-bundle
Installation:
composer require ansien/symfony-ag-grid-bundle
Enable the bundle in config/bundles.php:
return [
// ...
Ansien\AgGridBundle\AgGridBundle::class => ['all' => true],
];
First Use Case:
use Ansien\AgGridBundle\Grid\GridFactory;
public function gridAction(GridFactory $gridFactory)
{
$grid = $gridFactory->create('my_grid');
$grid->setDataSource($this->getDoctrine()->getRepository(MyEntity::class)->findAll());
return $this->render('my_template.html.twig', ['grid' => $grid]);
}
{{ ag_grid(grid) }}
Key Files:
config/packages/ag_grid.yaml (if auto-generated)templates/ag_grid/_grid.html.twig (default template location)Dynamic Data Binding:
$grid->setDataSource(function() {
return $this->entityManager->getRepository(MyEntity::class)
->createQueryBuilder('e')
->where('e.status = :status')
->setParameter('status', 'active')
->getQuery()
->getResult();
});
Column Configuration:
$grid->setColumns([
['field' => 'id', 'headerName' => 'ID', 'width' => 100],
['field' => 'name', 'headerName' => 'Name', 'editable' => true],
['field' => 'createdAt', 'headerName' => 'Created At', 'valueFormatter' => 'dateFormatter'],
]);
Event Handling:
$grid->setEventListeners([
'onCellClicked' => function($params) {
$this->addFlash('info', 'Clicked: ' . $params['data']['name']);
}
]);
Integration with Forms:
$grid->setFormType(MyEntityType::class);
$grid->setFormHandler(function($entity, $data) {
$entity->setName($data['name']);
$this->entityManager->flush();
});
templates/ag_grid/_grid.html.twig to your project.{{ ag_grid(grid, {
'defaultColDef': {
'filter': true,
'sortable': true,
'resizable': true
}
}) }}
Abandoned Package:
egeloen/ag-grid-bundle.Configuration Quirks:
ag_grid.yaml; manually create it if needed.base.html.twig includes:
{{ encore_entry_link_tags('ag-grid') }}
Doctrine Integration:
setDataSource() expects an array or Traversable; ensure your repository method returns compatible data.->getResult() or ->toArray().JavaScript Dependencies:
// assets/js/app.js
window.agGrid = require('ag-grid-community');
create('unique_id') is called with a unique string.Custom Templates:
Extend _grid.html.twig to add features like:
{# Add a custom toolbar #}
<div class="ag-grid-custom-toolbar">
<button onclick="refreshGrid()">Refresh</button>
</div>
Event Listeners: Register global listeners in a service:
# config/services.yaml
services:
App\EventListener\AgGridListener:
tags:
- { name: kernel.event_listener, event: ag_grid.onGridReady, method: onGridReady }
API Integration:
For server-side row model, extend GridFactory to implement custom data fetching:
$grid->setServerSide(true)
->setServerSideDataprovider(new CustomServerSideProvider());
How can I help you explore Laravel packages today?