кибатиц/datagrid-bundle

datagrid for Symfony

安装次数: 11 508

依赖关系: 0

建议者: 0

安全: 0

星标: 10

关注者: 5

分支: 1

开放问题: 4

类型:symfony-bundle

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

README

Symfony的datagrid扩展包,设计理念为:更少的魔法,更多的灵活性。

它不是一个简单的单行datagrid生成器,它更为详细,但我们认为这是值得的。

功能

  • 您的实体在表格中
  • 分页
  • 可排序
  • 可过滤
  • 操作(简单 & 批量)
  • 可定制模板
  • 仅支持Doctrine ORM
  • 主题(bootstrap 4和5)

快速开始

安装扩展包

composer require kibatic/datagrid-bundle

将以下内容添加到您的 assets/controllers.json 文件中

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

您可能还需要启用此twig函数: https://twig.symfony.ac.cn/doc/2.x/functions/template_from_string.html

基本用法

<?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
        ]);
    }
}

以及相关的twig

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

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

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

文档

有关如何生成您的datagrid的更多信息,请参阅 高级示例

如果您想自定义分页,请使用knp paginator配置。

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

如果您在一个实时组件(symfony ux)中使用datagrid,您需要这样做

要求

  • Symfony 6
  • PHP 8.2
  • Doctrine ORM

路线图

  • 添加Flex配方
  • 移除Bootstrap 4和Sonata变体
  • 更多列类型和模板选项?