2018-07-13 06:47
浏览 120

如何让控制器在Symfony 4中返回响应?

I installed the DataTableBundle in Symfony 4 according to this tutorial:


namespace App\Controller;

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

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'],

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

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

But I get an error message by Symfony:

Uncaught PHP Exception LogicException: "The controller must return a response (null given). Did you forget to add a return statement somewhere in your controller?" at /Users/work/project/vendor/symfony/http-kernel/HttpKernel.php line 165

I tried to change this line:

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

into this:

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

but then I get a blank page with the text Loading... and nothing else.


<!-- in the <head> section -->
<link rel="stylesheet" type="text/css" href=""/>

<!-- Insert this where you want the table to appear -->
<div id="presidents">Loading...</div>

<!-- before the closing <body> tag -->
<script type="text/javascript" src=""></script>

<!-- Insert this at the end of your body element, but before the closing tag -->
<script src="{{ asset('bundles/datatables/js/datatables.js') }}"></script>
$(function() {
    $('#presidents').initDataTables({{ datatable_settings(datatable) }});


# Put parameters here that don't need to change on each machine where the app is deployed
    locale: 'en'

    # default configuration for services in *this* file
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
        public: false       # Allows optimizing the container by removing unused services; this also means
                            # fetching services directly from the container via $container->get() won't work.
                            # The best practice is to be explicit about your dependencies anyway.

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
        resource: '../src/*'
        exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'

    # controllers are imported separately to make sure services can be injected
    # as action arguments even if you don't extend any base controller class
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

    # add more service definitions when explicit configuration is needed
    # please note that last definitions always *replace* previous ones
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douguazhi5966 2018-07-13 06:57

    The missing return was indeed the problem. The reason for having a blank page with the word "Loading..." on it will be located in your list.html.twig. But for solving this problem you have to provide more code.

    打赏 评论

相关推荐 更多相似问题