Installation
composer require bs-code/bsaggridbundle
Add to config/bundles.php:
return [
// ...
BsCode\BsAgGridBundle\BsAgGridBundle::class => ['all' => true],
];
Basic Configuration Publish the default config:
php bin/console bs-ag-grid:install
Edit config/packages/bs_ag_grid.yaml to define your data source (e.g., Doctrine entities).
First Use Case
Create a Twig template (resources/views/aggrid/table.html.twig):
{{ aggrid_table({
'id': 'user-grid',
'columns': [
{ 'field': 'id', 'headerName': 'ID' },
{ 'field': 'name', 'headerName': 'Name' }
],
'rowData': path('bs_ag_grid_api_get_data', { entity: 'App\Entity\User' })
}) }}
bs_ag_grid.yaml to map entities:
entities:
App\Entity\User:
fields:
id: ~
name: ~
filters: [name]
BsCode\BsAgGridBundle\DataSource\DataSourceInterface for non-Doctrine data (e.g., API calls, CSV)./api/bs-ag-grid/{entity}/data for pagination/filtering.config/packages/bs_ag_grid.yaml:
controllers:
App\Entity\User: App\Controller\CustomUserGridController
<script src="https://unpkg.com/ag-grid-community/dist/ag-grid-community.min.js"></script>
{% set columns = [] %}
{% for field, config in aggrid_columns('App\Entity\User') %}
{% set _ = columns.append(config) %}
{% endfor %}
aggrid_table with editType: 'fullRow' for inline editing.onRowEditComplete.{{ aggrid_table({
// ...,
'enableExport': true,
'exportTypes': ['csv', 'excel']
}) }}
/api/bs-ag-grid/{entity}/data endpoint via JavaScript:setInterval(() => gridApi.getServerSideDatasource().refresh(), 30000);
var/log/dev.log for Doctrine/QueryBuilder errors. Enable SQL logging in config/packages/doctrine.yaml:
dbal:
logging: true
onGridReady to log errors:
onGridReady: (params) => {
params.api.addEventListener('modelUpdated', () => {
console.log('Grid state:', params.api.getModel());
});
}
fields in bs_ag_grid.yaml match the entity properties exactly (case-sensitive).default_pagination_page_size: 25
bs_ag_grid.yaml:
php bin/console cache:clear
BsCode\BsAgGridBundle\Filter\FilterInterface and register in services.yaml:
services:
App\Filter\CustomFilter:
tags: [bs_ag_grid.filter]
BsAgGridBundle service:
services:
BsCode\BsAgGridBundle\Column\ColumnType\TextColumnType:
arguments:
$cellRenderer: 'customRenderer'
// src/Voter/GridAccessVoter.php
public function supports(string $attribute, $subject): bool
{
return $attribute === 'GRID_ACCESS' && $subject instanceof UserInterface;
}
serverSideStoreType: 'serverSide' in config.entities:
App\Entity\Product:
fields:
id: ~
name: ~
dql_partition: 'p.id IN (:ids)' # Custom DQL for IDs
How can I help you explore Laravel packages today?