PHPackages                             survos/tabler-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. [Utility &amp; Helpers](/categories/utility)
4. /
5. survos/tabler-bundle

ActiveSymfony-bundle[Utility &amp; Helpers](/categories/utility)

survos/tabler-bundle
====================

Add some tools and resources to a Symfony 7.4/8 application, based on Tabler (tabler.io)

2.0.194(1mo ago)01562MITTwigPHP ^8.4

Since Dec 30Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/survos/tabler-bundle)[ Packagist](https://packagist.org/packages/survos/tabler-bundle)[ GitHub Sponsors](https://github.com/kbond)[ RSS](/packages/survos-tabler-bundle/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (87)Versions (65)Used By (2)

NOTE: During Dec 2025 development, bundle is in its own repo, NOT the mono-repo!

composer config repositories.survos\_admin\_bundle '{"type": "vcs", "url": ":survos/SurvosTablerBundle.git"}' composer req survos/tabler-bundle

composer config repositories.survos\_tabler\_bundle '{"type": "vcs", "url": ":survos/SurvosTablerBundle.git"}' composer req survos/tabler-bundle

Survos Tabler Bundle
====================

[](#survos-tabler-bundle)

Derived from survos/bootstrap-bundle, it is tabler-only.

A moderately-opinionated bundle that provides a quick way to get up and running with Symfony.
In particular, it sets up and uses the following:

- Knp Menu for sidebar and top nagivation

Assumptions
-----------

[](#assumptions)

While the following can be disabled, by default the bundle assumes you want the following

- Authentication
- A user and an admin role
- Users

### Goals

[](#goals)

This bundle was created originally to isolate issues with other bundles and to get data on a website as quickly and painlessly as possible.

### Requirements

[](#requirements)

- composer
- PHP 8.4+
- Symfony CLI (for running a local server, creating project, etc.)

### Create github Project

[](#create-github-project)

- Create a NEW repository, use lowercase if integrating with heroku

on github.com with no files (no README or license), clone it to some directory and go there.

```
 REPO=tabler-bundle-demo
 git clone git@github.com:survos/$REPO.git && cd $REPO

```

- Create the Symfony Skeleton WITHOUT a git repo, then ADD the repo. Allow recipes

```
rm -f LICENSE && rm -f README.md && mv .git .. && symfony new --full . --no-git --version=5.4 && mv ../.git . && git checkout .
composer config extra.symfony.allow-contrib true
```

OR if you're using Sqlite.

```
heroku create $REPO
echo "DATABASE_URL=sqlite:///%kernel.project_dir%/var/data.db" > .env.local
```

We always want some security, so certain routes can be secured. Create a User entity, and then a LoginFormAuthenticator. Tweak AppAuthenciator to return to home after a successful login. Set the MAILER\_URL to the default.

```
bin/console make:user User --is-entity --identity-property-name=email --with-password -n
#sed -i "s|public function getEmail| public function getUsername() { return \$this->getEmail(); }\n\n public function getEmail|" src/Entity/User.php

sed -i "s|# MAILER_DSN|MAILER_DSN|" .env

echo "1,AppAuthenticator,SecurityController,/logout," | sed "s/,/\n/g"  | bin/console make:auth
sed -i "s|// For example.*;|return new RedirectResponse(\$this->urlGenerator->generate('app_homepage'));|" src/Security/AppAuthenticator.php
sed -i "s|throw new \\Exception\('TODO\: provide a valid redirect inside '\.__FILE__\);||" src/Security/AppAuthenticator.php

```

Optional, since SurvosBaseBundle has this already, formatted for mobile
=======================================================================

[](#optional-since-survosbasebundle-has-this-already-formatted-for-mobile)

```
bin/console make:registration-form

```

Now install the Survos BaseBundle
=================================

[](#now-install-the-survos-basebundle)

```
composer config minimum-stability dev
composer config prefer-stable true

composer config repositories.knp_markdown '{"type": "vcs", "url": "git@github.com:tacman/KnpMarkdownBundle.git"}'
composer req knplabs/knp-markdown-bundle:dev-symfony6

composer config repositories.survos_admin_bundle '{"type": "vcs", "url": "git@github.com:survos/SurvosAdminBundle.git"}'
composer config repositories.survos_base_bundle '{"type": "vcs", "url": "git@github.com:survos/BaseBundle.git"}'
composer config repositories.ux-datatable '{"type": "vcs", "url": "git@github.com:tacman/ux-datatable.git"}'
composer req tacman/ux-datatable

composer require umbrella2/adminbundle
php bin/console make:admin:home

composer config repositories.cs_fixer '{"type": "vcs", "url": "git@github.com:tacman/PHP-CS-Fixer.git"}'
composer config repositories.survos_workflow '{"type": "vcs", "url": "git@github.com:survos/workflow-bundle.git"}'
composer config repositories.tabler '{"type": "vcs", "url": "git@github.com:survos/TablerBundle.git"}'
composer req survos/base-bundle:"^2.0.3"
composer req survos/tabler-bundle:dev-tac

composer require symfony/webpack-encore-bundle

#echo '@import "~bootstrap/dist/css/bootstrap.min.css";' > assets/styles/app.scss
#echo '@import "../../public/bundles/survosbase/volt-dist/css/volt.css";' >>assets/styles/app.scss
## FIRST, initialize SurvosBase, which creates app.scss.  Then fix webpack.

sed -i "s|//.enableSassLoader()|.enableSassLoader()|" webpack.config.js
sed -i "s|import './styles/app.css';|import './styles/app.scss';|" assets/js/app.js

yarn install

yarn add "@symfony/webpack-encore@^1.0.0"
yarn add "@symfony/stimulus-bridge@^2.0.0"
yarn add bootstrap@next

yarn add datatables.net-bs5 datatables.net-buttons-bs5 datatables.net-scroller datatables.net-scroller-bs5 datatables.net-select-bs5 datatables.net-searchpanes datatables.net-searchpanes-bs5 datatables.net-colreorder datatables.net-colreorder-bs5
```

Survos Dev only
===============

[](#survos-dev-only)

```
composer config repositories.survos_base_bundle '{"type": "path", "url": "../Survos/BaseBundle"}'
composer config repositories.geonames '{"type": "path", "url": "../Survos/geonames-bundle"}'
composer config repositories.phpspreadsheet '{"type": "path", "url": "../Survos/phpspreadsheet-bundle"}'

```

@TODO: recipes!
---------------

[](#todo-recipes)

```
composer config repositories.multisearch '{"type": "vcs", "url": "git@github.com:tacman/PetkoparaMultiSearchBundle.git"}'

repositories.captcha '{"type": "vcs", "url": "git@github.com:cyrilverloop/symfony-captcha-bundle.git"}'

composer config repositories.git-survosbase '{"type": "vcs", "url": "https://github.com/survos/BaseBundle.git"}'

composer config repositories.git-geonames '{"type": "vcs", "url": "https://github.com/survos/geonames-bundle.git"}'

composer config repositories.flowdemo '{"type": "path", "url": "../Survos/../CraueFormFlowDemoBundle"}'

composer config repositories.social_post_bundle '{"type": "path", "url": "../Survos/social-post-bundle"}'

composer config repositories.social_post_bundle '{"type": "vcs", "url": "https://github.com/tacman/social-post-bundle"}'

# this is needed because it creates MAILER_DSN, which isn't created otherwise
# composer req mail
composer req knplabs/knp-menu-bundle:"^3.0@dev"

composer req survos/base-bundle:"*@dev"
phpstorm .env

```

OR

Step 1: Initialize Yarn Packages via Survos Init
------------------------------------------------

[](#step-1-initialize-yarn-packages-via-survos-init)

```
# creates survos_base.yaml (a recipe would be nicer!)
bin/console survos:init

# edit .env and set MAILER_URL

```

Ugh, still doesn't work, needs a base menu
==========================================

[](#ugh-still-doesnt-work-needs-a-base-menu)

```
# introspection, creates menus, looks for entities, easyadmin, etc.
bin/console survos:configure

# symfony run -d yarn encore dev --watch

```

### Integrating Facebook and other OAuth

[](#integrating-facebook-and-other-oauth)

Go to

e.g.

```
composer require league/oauth2-facebook

```

The create an app and enable login:

Need a config script that asks for the ID and sets it in .env.local (or Heroku, etc.)

### Install and Configure UserBundle (optional)

[](#install-and-configure-userbundle-optional)

See \[docs/recommended\_bundles\]

#### If developing BaseBundle

[](#if-developing-basebundle)

```
composer config repositories.survosbase '{"type": "path", "url": "../Survos/BaseBundle"}'
composer req survos/base-bundle:"*@dev"

```

#### Normal installation

[](#normal-installation)

Install the bundle, then go through the setup to add and configure the tools.

```
composer req survos/base-bundle

yarn install

xterm -e "yarn run encore dev-server" &

composer req "kevinpapst/adminlte-bundle"
composer require knplabs/knp-menu-bundle
bin/console make:subscriber KnpMenuSubscriber "Survos\BaseBundle\Event\KnpMenuEvent"

bin/console survos:init

bin/console survos:config --no-interaction
bin/console doctrine:schema:update --force

```

#### survos:init

[](#survosinit)

First time setup, downloads jquery, bootstrap, etc. Also *modifies* some yaml files, and creates the first menu.

```
# config/packages/admin_lte.yaml
admin_lte:
    knp_menu:
        enable: true

    routes:
        adminlte_welcome: app_homepage
        adminlte_login: app_login
        adminlte_profile: app_profile
```

@todo: Generate this Controller and templates?

```
# config/routes/survos_base.yaml
survos_base: {path: /, controller: 'Survos\BaseBundle\Controller\BaseController::base'}
# app_homepage: {path: /, controller: 'Survos\BaseBundle\Controller\LandingController::base'}
app_logo: {path: /logo, controller: 'Survos\BaseBundle\Controller\BaseController::logo'}
app_profile: {path: /profile, controller: 'Survos\BaseBundle\Controller\BaseController::profile'}
# profile: {path: /profile, controller: 'Survos\BaseBundle\Controller\LandingController::profile'}
# logout: {path: /logout, controller: 'Survos\BaseBundle\Controller\LandingController::logout'}
# required if app_profile is used, since you can change the password from the profile
app_change_password: {path: /change-password, controller: 'Survos\BaseBundle\Controller\BaseController::changePassword'}
```

{% extends '@SurvosBaseBundle/layout/default-layout.html.twig' %} {% block page\_content %} {{ block('body') }} {% endblock %}

{% block logo\_mini %}**KPA**{% endblock %} {% block logo\_large '**KPA** Admin' %}

{% block page\_title 'KPA Admin' %} {% block page\_subtitle 'Songs and Music!' %}

### 2021 Goal: Remove jQuery

[](#2021-goal-remove-jquery)

use vue or react instead.

#### Now install some bundles!

[](#now-install-some-bundles)

```
See the details at [Recommended Bundles](docs/recommended-bundles.md)

```

If you chosen to integrate the userbundle, update the schema and add an admin

```
bin/console doctrine:schema:update --force

symfony server:start --no-tls

```

When finished, the application will have a basic base page with top navigation, optionally including login/registration pages. Logged in users with ROLE\_ADMIN will also (optionally) have links to easyadmin and api-platform.

### Api Platform

[](#api-platform)

@todo: put this in a survos:setup command.

- Expose the API routes (for jsRoutingBundle), and

```
# config/routes/api_platform.yaml
api_platform:
    resource: .
    type: api_platform
    prefix: /api
    options:
        expose: true
```

Create resources.yaml to store the configuration

```
# api/config/api_platform/resources.yaml
App\Entity\User: ~
App\Entity\Location:
  shortName: 'Location'                   # optional
  description: 'A place within a building where inventory item is physically located.' # optional
  attributes:                          # optional
    pagination_items_per_page: 30   # optional
    normalization_context:
      groups: ['jstree']
    denormalization_context:
      groups: ['jstree']
```

Add the resources.yaml directory to the mapping paths

```
# config/packages/api_platform.yaml
api_platform:
    mapping:
        paths:
            - '%kernel.project_dir%/src/Entity'
            - '%kernel.project_dir%/config/api_platform' # yaml or xml directory configuration]
    patch_formats:
        json: ['application/merge-patch+json']
    swagger:
        versions: [3]
```

Configure the serializer (may need to create the directory)

```
# config/serializer/serialization.yaml
App\Entity\User:
  attributes:
    id:
      groups: ['Default']
    email:
      groups: ['Default']

App\Entity\Song:
  attributes:
    title:
      groups: ['Default']
```

### Customizing the bundle

[](#customizing-the-bundle)

### Deploy to heroku

[](#deploy-to-heroku)

```
heroku create $projectName
heroku buildpacks:add heroku/php
heroku buildpacks:add heroku/nodejs

echo "web:  vendor/bin/heroku-php-nginx -C heroku-nginx.conf  -F fpm_custom.conf public/" > Procfile

heroku buildpacks:add heroku/nodejs
heroku buildpacks:add --index 2 heroku/nodejs

composer config --unset repositories.survosbase && composer update
git commit -m "unset survosbase" . && git push heroku master

```

bin/console survos:setup-heroku

alternatives
------------

[](#alternatives)

###  Health Score

48

—

FairBetter than 95% of packages

Maintenance90

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity66

Established project with proven stability

 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 ~1 days

Total

64

Last Release

49d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/21b39551f92ed4143772c622f9e571589c5a72c96ab3c53fe67489ce0d83e806?d=identicon)[tacman1123](/maintainers/tacman1123)

---

Top Contributors

[![tacman](https://avatars.githubusercontent.com/u/619585?v=4)](https://github.com/tacman "tacman (34 commits)")

---

Tags

symfonysymfony-ux

###  Code Quality

Static AnalysisPHPStan, Rector

Type Coverage Yes

### Embed Badge

![Health badge](/badges/survos-tabler-bundle/health.svg)

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

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M651](/packages/sylius-sylius)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.0k15.4k](/packages/prestashop-prestashop)[contao/core-bundle

Contao Open Source CMS

1231.6M2.4k](/packages/contao-core-bundle)[netgen/layouts-core

Netgen Layouts enables you to build and manage complex web pages in a simpler way and with less coding. This is the core of Netgen Layouts, its heart and soul.

3689.4k10](/packages/netgen-layouts-core)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)

PHPackages © 2026

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