Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Symfony Datatables Bundle Laravel Package

dolmitos/symfony-datatables-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require dolmitos/symfony-datatables-bundle
    

    Add to config/bundles.php:

    Dolmitos\DataTablesBundle\DolmitosDataTablesBundle::class => ['all' => true],
    
  2. Basic Controller Integration Create a controller with a DataTablesController trait:

    use Dolmitos\DataTablesBundle\Controller\DataTablesController;
    
    class UserController extends AbstractController
    {
        use DataTablesController;
    
        public function usersAction()
        {
            return $this->dataTablesResponse(
                $this->getDoctrine()->getRepository(User::class)->findAll(),
                ['id', 'name', 'email']
            );
        }
    }
    
  3. First Use Case

    • Configure a route (/users/datatable) pointing to usersAction.
    • Include DataTables JS/CSS in your template:
      {{ include('dolmitos_datatables::datatables.html.twig') }}
      
    • Initialize DataTables on a <table id="users-table"> with server-side processing:
      $('#users-table').DataTable({
          processing: true,
          serverSide: true,
          ajax: '/users/datatable'
      });
      

Implementation Patterns

Common Workflows

  1. Custom Query Building Override buildQuery() in your controller to customize database queries:

    protected function buildQuery($request, QueryBuilder $qb)
    {
        $qb->andWhere('u.active = :active')
           ->setParameter('active', true);
    }
    
  2. Column Configuration Define columns in getColumns():

    protected function getColumns()
    {
        return [
            'id' => ['title' => 'ID', 'data' => 'id'],
            'name' => ['title' => 'Name', 'data' => 'name'],
            'email' => [
                'title' => 'Email',
                'data' => 'email',
                'render' => function($value, $row) {
                    return '<a href="mailto:'.$value.'">'.$value.'</a>';
                }
            ]
        ];
    }
    
  3. Action Buttons Add action buttons via getActions():

    protected function getActions()
    {
        return [
            'edit' => [
                'title' => 'Edit',
                'url' => function($row) {
                    return $this->generateUrl('user_edit', ['id' => $row['id']]);
                }
            ]
        ];
    }
    
  4. Search and Filtering Leverage built-in search/filtering:

    protected function buildQuery($request, QueryBuilder $qb)
    {
        $this->addSearch($request, $qb, 'u.name', 'u.email');
        $this->addFilter($request, $qb, 'active', 'u.active');
    }
    
  5. Export Integration Enable CSV/Excel export via getExportOptions():

    protected function getExportOptions()
    {
        return [
            'csv' => ['title' => 'CSV'],
            'excel' => ['title' => 'Excel']
        ];
    }
    

Integration Tips

  1. Twig Integration Use dolmitos_datatables:: namespace for templates:

    {% extends 'base.html.twig' %}
    {% block stylesheets %}
        {{ parent() }}
        {{ include('dolmitos_datatables::stylesheets.html.twig') }}
    {% endblock %}
    
  2. API-Only Usage For API endpoints, return raw JSON:

    return $this->dataTablesJsonResponse($data, $columns);
    
  3. Dependency Injection Inject services (e.g., EntityManager) via constructor:

    public function __construct(EntityManagerInterface $em) {
        $this->em = $em;
    }
    
  4. Custom Response Transformers Extend DataTablesResponseTransformer for custom JSON structures.


Gotchas and Tips

Pitfalls

  1. Case Sensitivity in Column Names Ensure data keys in getColumns() match entity property names exactly (e.g., user_id vs. userId).

  2. Pagination Conflicts Avoid naming routes with /page or /_page if using DataTables pagination, as it may conflict with server-side processing.

  3. Caching Issues Clear Symfony cache after updating bundle configurations:

    php bin/console cache:clear
    
  4. Doctrine QueryBuilder Limitations Complex joins or subqueries may require manual SQL or DQL in buildQuery().

  5. CSRF Protection Disable CSRF for DataTables AJAX routes if using server-side processing:

    # config/packages/framework.yaml
    framework:
        csrf_protect_csrf_token: false
    

Debugging Tips

  1. Enable Query Logging Add to config/packages/dev/doctrine.yaml:

    doctrine:
        dbal:
            logging: true
            profiling: true
    
  2. Check Request Data Dump $request->request->all() in buildQuery() to verify DataTables parameters (draw, start, length, columns, order, search).

  3. Validate JSON Response Use browser dev tools to inspect the AJAX response for errors (e.g., malformed JSON or missing data/recordsTotal keys).

Configuration Quirks

  1. Default Sorting Set default sort in getDefaultOrder():

    protected function getDefaultOrder()
    {
        return ['column' => 0, 'dir' => 'desc'];
    }
    
  2. Hidden Columns Mark columns as hidden in getColumns():

    'id' => ['title' => 'ID', 'data' => 'id', 'visible' => false]
    
  3. Custom Server Parameters Extend DataTablesRequest to add custom parameters:

    use Dolmitos\DataTablesBundle\Request\DataTablesRequest;
    
    class CustomRequest extends DataTablesRequest
    {
        public function getCustomParam()
        {
            return $this->request->get('custom_param');
        }
    }
    
  4. Localization Override translations in config/packages/dolmitos_datatables.yaml:

    dolmitos_datatables:
        translations:
            empty_table: "No data available in this language."
    

Extension Points

  1. Custom Data Source Implement DataTablesDataSourceInterface for non-Doctrine data sources (e.g., API clients).

  2. Event Listeners Subscribe to dolmitos_datatables.build_query or dolmitos_datatables.response events for pre/post-processing.

  3. Custom Renderers Extend DataTablesRenderer to modify HTML output (e.g., add icons or badges).

  4. Plugin Integration Use addJsPlugin() in Twig to include DataTables extensions (e.g., select, buttons):

    {{ include('dolmitos_datatables::datatables.html.twig', {
        plugins: ['select', 'buttons']
    }) }}
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament