PHPackages                             musicjerm/jermbundle - 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. [Framework](/categories/framework)
4. /
5. musicjerm/jermbundle

ActiveSymfony-bundle[Framework](/categories/framework)

musicjerm/jermbundle
====================

JermBundle Library for Symfony 4 projects

0508[1 issues](https://github.com/musicjerm/jermbundle/issues)PHP

Since Aug 18Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/musicjerm/jermbundle)[ Packagist](https://packagist.org/packages/musicjerm/jermbundle)[ RSS](/packages/musicjerm-jermbundle/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependenciesVersions (2)Used By (0)

JermBundle
==========

[](#jermbundle)

[![Author](https://camo.githubusercontent.com/4b5e2f6ab731d6573b1bc06bf0464bdfbd24b424b67538e8643e3b03a2f01e5a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f617574686f722d406d757369636a65726d2d626c75652e737667)](https://github.com/musicjerm)[![Source Code](https://camo.githubusercontent.com/f266eb2438f54c1d34072c41a5bf4611f7f489e16b508ec0aeeea40c04b651ce/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f736f757263652d6d757369636a65726d2f6a65726d62756e646c652d626c75652e737667)](https://github.com/musicjerm/jermbundle)[![Software License](https://camo.githubusercontent.com/074b89bca64d3edc93a1db6c7e3b1636b874540ba91d66367c0e5e354c56d0ea/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e737667)](https://github.com/musicjerm/jermbundle/blob/master/LICENSE)[![php 7.2+](https://camo.githubusercontent.com/ea485165fba10a2b75d864f4b744043537a09dd4e5465a9fd341ba7b7f7be6ef/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d372e322b2d7265642e737667)](https://camo.githubusercontent.com/ea485165fba10a2b75d864f4b744043537a09dd4e5465a9fd341ba7b7f7be6ef/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d372e322b2d7265642e737667)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[](#)

JermBundle is a custom-made data focused CMS, built for use with Symfony PHP projects. Included are CRUD methods, data import / export tools, user role management, customizable front end elements and more!

[![App screenshot](/assets/screenshots/app_view.png)](/assets/screenshots/app_view.png)
---------------------------------------------------------------------------------------

[](#-1)

To install
----------

[](#to-install)

`composer require musicjerm/jermbundle`

Please see requirements, configuration and other information below.

---

Features
--------

[](#features)

- A configurable CRUD controller that associates with Doctrine Entity mappings. Standard CRUD functionality streamlined into "Actions".
- Easy to use config based Import Controller that can handle large CSV files with hundreds of thousands of lines.
- Column and filter preset management which allows users to customize and save their data filters and column selection.
- Front end templates that include navigation, data tables, filters and pagination. Intended to provide a clean workflow with an admin inspired look, these can be extended or replaced.
- Notification and subscriber events and methods.
- Base Doctrine entities.
- Easily exportable data with customizable columns for every entity.
- User role control for data visibility and actions.

---

Requirements
------------

[](#requirements)

- PHP 7.2 or higher
- Symfony 4 or Symfony 5
- Doctrine
- PHPOffice/PhpSpreadsheet for exporting data to Excel format

### Front end (recommended to utilize all functionality)

[](#front-end-recommended-to-utilize-all-functionality)

- Twig
- Bootstrap 3
- AdminLTE 3
- Fontawesome icon set
- JQuery 3.7.0
- JQuery Datatables
- Jquery Select2
- Bootstrap Datepicker
- Bootstrap Timepicker
- JQuery slimscroll
- JQuery inputmask
- ClipboardJs

---

Setting up your application
---------------------------

[](#setting-up-your-application)

After installation of the bundle, be sure to add: `Musicjerm\Bundle\JermBundle\JermBundle::class => ['all' => true],` to your `/project/config/bundles.php` file. The route `jerm_bundle_data_index` will require entity config files to be created and will provide much of the bundle's base layout with navigation, data tables, filters and other customizable elements.

You will also want to review the available methods and modules located in the [Routing](Resources/config/routes.yaml) config.

Included Twig templates can be found [here](Resources/views).

### Nav Config

[](#nav-config)

If using the recommended front end libraries, you can take advantage of configurable route and user role associated navigation. This file must be included in `src/JBConfig/nav.yaml`. You may have up to 3 layers of subnav groups. Example Below:

```
# /project_dir/src/JBConfig/nav.yaml

Home:
  route: 'homepage'
  role: 'IS_AUTHENTICATED_ANONYMOUSLY'
  icon: 'fa-home'

Invites:
  route: 'jerm_bundle_data_index'
  parameters: {entity: 'invite'}
  role: 'ROLE_USER'
  icon: 'fa-envelope'

Booking:
  Appointments:
    route: 'jerm_bundle_data_index'
    parameters: {entity: 'appointment'}
    role: 'ROLE_BOOKING'
    icon: 'fa-book'
  Calendar:
    route: 'booking_calendar_index'
    role: 'ROLE_BOOKING'
    icon: 'fa-calendar'
```

### Entity Config

[](#entity-config)

As JermBundle is designed around data management, it is necessary to create some configurable YAML files that associate to a specific Doctrine entity. These will be stored in your project's `src/JBConfig/Entity/` directory. An example will look like the following:

```
# /project_dir/src/JBConfig/Entity/location.yaml

entity: 'App\Entity\Location'
role: 'ROLE_SUPERVISOR'
page_name: 'Locations'
template: 'dataIndex/location.html.twig'

# columns determine which Doctrine properties are displayed and
# each line must include the following:
# title - What the columns should be called, can be anything
# data - this is a getter minus the 'get' from the associated doctrine entity
# sort - passed to the data table for sorting
columns:
    - { title: 'ID', data: 'id', sort: 'l.id' }
    - { title: 'Parent Location', data: 'parentLocation', sort: 'l.parentLocation' }
    - { title: 'Default Job', data: 'defaultJob', sort: 'l.defaultJob' }
    - { title: 'Name', data: 'name', sort: 'l.name' }
    - { title: 'Address', data: 'address', sort: 'l.address' }
    - { title: 'City', data: 'city', sort: 'l.city' }
    - { title: 'State', data: 'state', sort: 'l.state' }
    - { title: 'Zip', data: 'zip', sort: 'l.zip' }
    - { title: 'Market', data: 'market', sort: 'l.market' }
    - { title: 'Contact ID', data: 'userContact.id', sort: 'l.userContact' }
    - { title: 'Contact Name', data: 'userContact.fullName', sort: 'c.userContact' }
    - { title: 'Contact E-mail', data: 'userContact.email', sort: 'c.userContact' }
    - { title: 'Contact Phone', data: 'userContact.phone', sort: 'c.phone' }
    - { title: 'Alternate Contact', data: 'altContactName', sort: 'l.altContactName' }
    - { title: 'Alternate Contact E-mail', data: 'altContactEmail', sort: 'l.altContactEmail' }
    - { title: 'Alternate Contact Phone', data: 'altContactPhone', sort: 'l.altContactPhone' }
    - { title: 'Buyer E-mail', data: 'buyer', sort: 'l.buyer' }
    - { title: 'Active', data: 'isActiveString', sort: 'l.isActive' }
    - { title: 'Default Skin', data: 'defaultSkin', sort: 'l.defaultSkin' }
    - { title: 'Created By', data: 'userCreated', sort: 'l.userCreated' }
    - { title: 'Updated By', data: 'userUpdated', sort: 'l.userUpdated' }
    - { title: 'Created On', data: 'dateCreated', sort: 'l.dateCreated' }
    - { title: 'Updated On', data: 'dateUpdated', sort: 'l.dateUpdated' }

# key is required for item and group actions and the associated value for an object is passed in the route parameters
key: 'id'

# default indexes that are initially available to a user
view: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18]

# default indexes for columns that might be exported by a user
dump: [1, 2, 3, 4, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18]

# default indexes for tooltips - must be one digit for every available column
# -1 indicates no tooltip for that position
tooltip: [-1, 4, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]

# default sort key and direction
sortId: 23
sortDir: 'desc'

# filters can be assigned here, these can be text fields, selectors (with entity association),
# radios or checkboxes JermBundle does its best to support nearly any possible filter necessary
# and also supports a custom implementation.  For these to work a StandardQuery method must be
# included in the EntityRepository class.
filters:
    - { name: 'Search', type: 'Text' }
    -
        name: 'Active'
        type: 'Choice'
        array:
            choices: {Yes: true, No: false}
            placeholder: 'Any'

# actions are a form of customizable data manipulation method separated into 3 categories
# head actions will be placed in the admin panel at the top and are typically used for new
# object creation or mass edits.
# item actions are actions on a single entity such as a CRUD update.
# group actions are actions on a selection of items that will be updated together.
# These are keyed by the symfony route name.
actions:
    head:
        jerm_bundle_crud_create:
            role: 'ROLE_ADMIN'
            text: 'New'
            icon: 'fa-plus'
            btn: 'btn-primary'
            params: { entity: 'location' }
            front_load:
                - 'app/js/select2query.js'
    item:
        jerm_bundle_crud_update:
            role: 'ROLE_ADMIN'
            icon: 'fa-pencil'
            text: 'Edit'
            params: { entity: 'location' }
            front_load:
                - 'app/js/select2query.js'
    group:
        jerm_bundle_crud_delete:
            role: 'ROLE_ADMIN'
            text: 'Delete Selected'
            params: { entity: 'location' }

# importer configuration
# supply the namespace of a data transformer within the application and JermBundle will create
# a customized importer action.  Headers must map to Doctrine entity properties.
# unique, required and associated values are taken into consideration when data is handled.
# batch size can be set or a default of 1000 will be used
import:
  transformer: 'App\Transformer\LocationImportTransformer'
  headers:
    - 'name'
    - 'address'
    - 'city'
    - 'state'
    - 'zip'
    - 'market'
  keys: [0, 1]
  batch_size: 3000
```

### Additional info on Actions

[](#additional-info-on-actions)

JermBundle Actions relate to CRUD methods or can also be custom methods designed for manipulating data in a specific way. At a basic level, these are simply routing links to modules, forms or functions that will present in a modal view. Nav links are separated into 3 classes that are configured initially in a JBConfig/Entity YAML file. See the examples above.

---

Column and Filter presets
-------------------------

[](#column-and-filter-presets)

Preset configuration is included with the bundle and works out of the box once your entity config files have been set up! This allows users to define their own presets for which columns are displayed and exported.

[![column presets](/assets/screenshots/column_presets.png)](/assets/screenshots/column_presets.png)[![filter_presets](/assets/screenshots/filter_presets.png)](/assets/screenshots/filter_presets.png)

[![column_preset_config](/assets/screenshots/column_preset_config.png)](/assets/screenshots/column_preset_config.png)

---

Other use cases
---------------

[](#other-use-cases)

JermBundle is capable of serving as a file management platform and has even been used to sync local storage with Amazon's S3 cloud storage. [![aws_s3_example](/assets/screenshots/aws_s3_example.png)](/assets/screenshots/aws_s3_example.png)

---

TODO:
-----

[](#todo)

- Refine dependency version requirements and update this readme.
- Update base Doctrine entities to use PHP 8 annotations.
- Clean up controllers and commenting throughout.
- Update Bootstrap and AdminLTE to version 4, or possibly implement a modern front end with Vue.
- Add additional functionality to CRUD controller, specifically implement the use of data transformers instead of relying on strict entity mapping.

---

Projects using this bundle
--------------------------

[](#projects-using-this-bundle)

- [www.bizzie.me](http://www.bizzie.me)
- [www.antunezcoffee.com](http://www.antunezcoffee.com)

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance53

Moderate activity, may be stable

Popularity12

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity23

Early-stage or recently created project

 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/ac0989d21882c5a9f61a5b40591de748df346af2e2a8e8bc5ac56b37961f0efa?d=identicon)[musicjerm](/maintainers/musicjerm)

---

Top Contributors

[![musicjerm](https://avatars.githubusercontent.com/u/695428?v=4)](https://github.com/musicjerm "musicjerm (113 commits)")

### Embed Badge

![Health badge](/badges/musicjerm-jermbundle/health.svg)

```
[![Health](https://phpackages.com/badges/musicjerm-jermbundle/health.svg)](https://phpackages.com/packages/musicjerm-jermbundle)
```

###  Alternatives

[laravel/telescope

An elegant debug assistant for the Laravel framework.

5.2k67.8M192](/packages/laravel-telescope)[spiral/roadrunner

RoadRunner: High-performance PHP application server and process manager written in Go and powered with plugins

8.4k12.2M84](/packages/spiral-roadrunner)[nolimits4web/swiper

Most modern mobile touch slider and framework with hardware accelerated transitions

41.8k177.2k1](/packages/nolimits4web-swiper)[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k36.7M259](/packages/laravel-dusk)[laravel/prompts

Add beautiful and user-friendly forms to your command-line applications.

708181.8M596](/packages/laravel-prompts)[cakephp/chronos

A simple API extension for DateTime.

1.4k47.7M121](/packages/cakephp-chronos)

PHPackages © 2026

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