Search code examples
phpsymfonyservicebundles

How can I configure a non-existent service in Symfony 4?


I installed this bundle and followed the tutorial step by step:

https://omines.github.io/datatables-bundle/#introduction

My Controller:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Omines\DataTablesBundle\Adapter\ArrayAdapter;
use Omines\DataTablesBundle\Column\TextColumn;
use Omines\DataTablesBundle\Controller\DataTablesTrait;


class DataTableController extends Controller
{

  /**
  * @Route("/")
  */

  use DataTablesTrait;

  public function showAction(Request $request)
  {
    $table = $this->createDataTable()
    ->add('firstName', TextColumn::class)
    ->add('lastName', TextColumn::class)
    ->createAdapter(ArrayAdapter::class, [
      ['firstName' => 'Donald', 'lastName' => 'Trump'],
      ['firstName' => 'Barack', 'lastName' => 'Obama'],
    ])
    ->handleRequest($request);

    if ($table->isCallback()) {
      return $table->getResponse();
    }

    $this->render('list.html.twig', ['datatable' => $table]);
  }
}

But I get the error message:

You have requested a non-existent service "Omines\DataTablesBundle\DataTableFactory".

I suppose that there is something missing in the services.yaml file. But in the tutorial they do not say something about it. So maybe it is another reason.


Solution

  • That service appears to be defined in the services.xml, itself pulled in by the bundle configuration, and that happens when the bundle is registered in the AppKernel class.

    class AppKernel extends Kernel
    {
        public function registerBundles()
        {
            $bundles = array(
                new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
                // ....
    
                new \Omines\DataTablesBundle\DataTablesBundle(),
    
                // ... other bundle registration
            );
    
            if (in_array($this->getEnvironment(), array('dev', 'test'))) {
                // ... 
            }
    
            return $bundles;
        }
    
        // ...
    }