kibatic/datagrid-bundle

Datagrid for Symfony

Installs: 12 593

Dependents: 0

Suggesters: 0

Security: 0

Stars: 10

Watchers: 5

Forks: 1

Open Issues: 4

Type:symfony-bundle

v1.0.42 2024-07-24 15:47 UTC

README

Datagrid bundle for Symfony with the following design philosophy : less magic for more flexibility.

It's not the usual one line datagrid generator, it's a more verbose but we think it's worth it.

Features

  • Your entities in a table
  • Pagination
  • Sortable
  • Filterable
  • Actions (simple & batch)
  • Customizable templates
  • Only supports Doctrine ORM
  • Theme (bootstrap 4 and 5)

Quick start

Install the bundle

composer require kibatic/datagrid-bundle

Add this to your assets/controllers.json :

{
    "controllers": {
        "@kibatic/datagrid-bundle": {
            "checker": {
                "enabled": true,
                "fetch": "eager"
            }
        }
}

You'll most likely also need to enable this twig function : https://twig.symfony.com/doc/2.x/functions/template_from_string.html

Basic usage

<?php

namespace App\Controller;

use App\Entity\Project;
use App\Repository\ProjectRepository;
use Kibatic\DatagridBundle\Grid\GridBuilder;
use Kibatic\DatagridBundle\Grid\Template;
use Kibatic\DatagridBundle\Grid\Theme;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class ProjectController extends AbstractController
{
    #[Route('/', name: 'app_project_index', methods: ['GET'])]
    public function index(
        Request $request,
        ProjectRepository $projectRepository,
        GridBuilder $gridBuilder,
    ): Response {
        // get current user
        $user = $this->getUser();
        
        // create query builder filtered by current user
        $queryBuilder = $projectRepository->createQueryBuilder('p')
            ->where('p.owner = :user')
            ->setParameter('user', $user)
            ->orderBy('p.createdAt', 'DESC');
        ;
        $grid = $gridBuilder
            ->initialize($request, $queryBuilder)
            ->setTheme(Theme::BOOTSTRAP5) // optional, it's the default value
            ->addColumn('Name', 'name')
            ->addColumn(
                'Created at',
                'createdAt',
                Template::DATETIME,
                sortable: 'createdAt'
            )
            ->getGrid()
        ;


        return $this->render('project/index.html.twig', [
            'grid' => $grid
        ]);
    }
}

And the associated twig

{% extends 'base.html.twig' %}

{% block body %}
    <h1>Project list</h1>

    {% include grid.theme ~ '/datagrid.html.twig' %}
{% endblock %}

Documentation

More information on how to generate your datagrid.

If you want to customize the pagination, use the knp paginator configuration.

# config/packages/knp_paginator.yaml
knp_paginator:
    page_limit: 20   

If you're using a datagrid inside a live component (symfony ux), you'll need to do this.

Requirements

  • Symfony 6
  • PHP 8.2
  • Doctrine ORM

Roadmap

  • Adding a Flex recipe
  • Remove Bootstrap 4 and Sonata variant
  • More column types and template options ?