PHPackages                             jpustkuchen/tableclass-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. jpustkuchen/tableclass-bundle

ActiveSymfony-bundle

jpustkuchen/tableclass-bundle
=============================

Symfony TableClass bundle to represent HTML table structure in objects.

0.1.17(4y ago)2128MITPHPPHP &gt;=7.3

Since Jun 11Pushed 4y ago1 watchersCompare

[ Source](https://github.com/JPustkuchen/TableClassBundle)[ Packagist](https://packagist.org/packages/jpustkuchen/tableclass-bundle)[ RSS](/packages/jpustkuchen-tableclass-bundle/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (8)Versions (19)Used By (0)

**Symfony (5) Bundle to represent a HTML Table as Object structure of typical elements like Header, Rows, Cells and the possibility to set Attributes (&amp; classes especially) on all elements in PHP Code.**

Helpful especially in combination with [DataTables](https://datatables.net/), but completely flexible and not bound to that context. To use in combination with DataTables, set the required classes and require [DataTables](https://datatables.net/) yourself. NOT included in this bundle! If you'd like to use AJAXified DataTables with Symfony, have a look at: I didn't need that complexity and missed some flexibility instead, which lead me to this project.

Example (in Symfony Controller)
===============================

[](#example-in-symfony-controller)

```
use JPustkuchen\TableClassBundle\Elements\TableRow;
use JPustkuchen\TableClassBundle\TableFactory;

class TsfAgDefaultController extends AbstractController
{
  public function indexAction(Request $request, TableFactory $tableFactory): Response
  {
        $results = [/* Your database query results or custom array as keyed array with row keys as value keys */
          ['col1' => 'Row 1 Cell 1 Value', 'col2' => 'Row 1 Cell 2 Value'],
          ['col1' => 'Row 2 Cell 1 Value', 'col2' => 'Row 2 Cell 2 Value'],
          // ...
        ];

        // TableFactory via dependency injection
        $tableMain = $tableFactory->createTable()
          // Set DataTable classes (optional - just as example)
          ->addClassesFromArray(['ui', 'selectable', 'celled', 'striped', 'stackable', 'table'])
          ->setHeaderFromArray([
            'col1' => 'Col 1 Header Label',
            'col2' => 'Col 2 Header Label',
            'tableActions' => 'Actions Example Row',
          ])->addRowsFromArray($results);
          // Alternatively you could also add rows and cols manually by ->addRow() or ->addColumn().

        // Iterate rows for actions on the data:
        $tableMain->iterateRows(function (TableRow $row, $index) {
          // Add classes based on cell values:
          $cellRow1 = $row->getCellbyKey('row1');
          $cellRow1Value = $cellRow1->getValue();
          if ($y) {
            // Add class 'warning' to row if condition is met
            $row->addClass('warning');
          }
          if ($z) {
            // Add class 'error' to cell if condition is met
            $cellRow1->addClass('error');
          }
          return $row;
        });

        // The contained table.html.twig expects the table array structure in the key 'tabledata':
        return $this->render('table.html.twig', [
          'tabledata' => $tableMain->toArray(),
        ]);
    }
}
```

Installation
============

[](#installation)

Make sure Composer is installed globally, as explained in the [installation chapter](https://getcomposer.org/doc/00-intro.md)of the Composer documentation.

Applications that use Symfony Flex
----------------------------------

[](#applications-that-use-symfony-flex)

Open a command console, enter your project directory and execute:

```
$ composer require jpustkuchen/tableclass-bundle
```

Applications that don't use Symfony Flex
----------------------------------------

[](#applications-that-dont-use-symfony-flex)

### Step 1: Download the Bundle

[](#step-1-download-the-bundle)

Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:

```
$ composer require jpustkuchen/tableclass-bundle
```

### Step 2: Enable the Bundle

[](#step-2-enable-the-bundle)

Then, enable the bundle by adding it to the list of registered bundles in the `config/bundles.php` file of your project:

```
// config/bundles.php

return [
    // ...
    \\::class => ['all' => true],
];
```

### Step 2: Use where you need it, for example in a Controller to create and render a table

[](#step-2-use-where-you-need-it-for-example-in-a-controller-to-create-and-render-a-table)

**See example above!**

*Important: The built-in -&gt;render() function doesn't work yet, if someone knows what's missing in the bundle to make Symfony Twig render the template, please help. Currently the bundles template / view directory isn't considered by Twig as it seems?!*

**Until that you'll have to copy the table.html.twig template from the bundle into your templates directory and use that to render the table by Twig include!**

The contained **table.html.twig** file is highly customizable by using blocks extensively.

### OPTIONAL: Use with DataTables.net

[](#optional-use-with-datatablesnet)

Simply require datatables.net, for example by:

```
npm install datatables.net

```

And require it in your app.js, for example like this:

```
const dt = require('datatables.net');
window.$.DataTable = dt;
window.dt = dt;

```

Then you'll could for example wrap the bundles *table.html.twig* in a parent twig file containing the DataTables.net initialisation, for example like this (or any other way):

```

  $( document ).ready(function() {
    $('#' + '{{id|default('datatable')|escape('html_attr')}}').DataTable({/* Optional datatables.net Options */});
  });

  {% include 'table.html.twig' %}

```

In our example we additionally used a table wrapper element, for more flexibility, for example to use scrolling tables, if needed. This part is also optional.

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

18

Last Release

1761d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/78b64c2067269da884065ed6011ee19dda1783a700c912cfcfadd92628971b79?d=identicon)[JPustkuchen](/maintainers/JPustkuchen)

---

Top Contributors

[![JPustkuchen](https://avatars.githubusercontent.com/u/637807?v=4)](https://github.com/JPustkuchen "JPustkuchen (92 commits)")

---

Tags

datatablessymfony-bundlesymfony5tablesymfonybundledatatables

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/jpustkuchen-tableclass-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/jpustkuchen-tableclass-bundle/health.svg)](https://phpackages.com/packages/jpustkuchen-tableclass-bundle)
```

###  Alternatives

[winzou/state-machine-bundle

Bundle for the very lightweight yet powerful PHP state machine

34010.4M15](/packages/winzou-state-machine-bundle)[omines/datatables-bundle

Symfony DataTables Bundle with native Doctrine ORM, Elastica and MongoDB support

2851.4M6](/packages/omines-datatables-bundle)[pentatrion/vite-bundle

Vite integration for your Symfony app

2725.3M13](/packages/pentatrion-vite-bundle)[florianv/swap-bundle

Integrates the Swap library with Symfony

62416.1k1](/packages/florianv-swap-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
