Согласно документации пакета Datatable Symfony, мне нужно реализовать обработчик.
Вам необходимо создать обработчик для каждого экземпляра DataTable. Обработчик должен реализовывать интерфейс DataTableHandlerInterface. Единственная функция, которую содержит этот интерфейс, - дескриптор:
/**
* Handles specified DataTable request.
*
* @param DataTableQuery $request
*
* @throws DataTableException
* @return DataTableResults
*/
public function handle(DataTableQuery $request): DataTableResults;
Что мне нужно знать, так это где именно я должен поместить этот код? В какой папке и на какой странице?
@Jeroen У меня нет папки AppBundle. Мне нужно добавить это в свой корень?
Это UsersDataTable.php или UsersDataTable.yaml?
Я думаю, мне нужно создать папку «AppBundle» в «src», правильно?
@Jarla, если у вас нет папки AppBundle, вам не нужно ее создавать. Обычно такая папка существует, но нам неизвестна структура вашей папки. Куда обычно попадает ваш код? В какой папке?
это PHP-код, поэтому вы должны поместить его в PHP-файл. и вы должны заменить AppBundle названием вашего пакета. если вы не используете бандлы (как в symfony 4), вам нужно поместить папку DataTables рядом с Controller (обычно в src)
Я создал сейчас этот файл src/Controller/DataTableController.php. Это сработает?
Как сказал @JimPanse, вам не нужно создавать его, просто создайте папку с именем «DataTables» рядом с папками Controller и Entity.
Это сработает, но если мы все еще говорим о вашем файле обработчика, было бы лучше назвать его «UsersDataTable» и поместить его в папку «DataTables», потому что это не контроллер.
@Jeroen Хорошо, тогда мой файл будет src/DataTables/UsersDataTable.php, вы это имеете в виду?
@Jarla Да! И вам также понадобится действие контроллера, как описано в разделе «UserAction» в github.com/webinarium/DataTablesBundle/…, которое вызывает обработчик
Спасибо. Я не знаю, почему они не объясняют, куда идет код. Например этот код services: AppBundle\DataTables\: resource: '../../src/AppBundle/DataTables' autowire: true public: false tags: [ datatable ] На какой странице это?






Вы можете поместить файл обработчика в
src/DataTables/UsersDataTable.php для проектов Symfony 4.
В этом файле вы реализуете обработчик запросов (https://github.com/webinarium/DataTablesBundle/wiki#step-1-implement-request-handler). Не забудьте зарегистрировать его как службу: https://github.com/webinarium/DataTablesBundle/wiki#step-2-register-the-handler
UsersDataTable.php
// src/DataTables/UsersDataTable.php
class UsersDataTable implements DataTableHandlerInterface
{
///
}
Вы регистрируете услуги в services.yaml
#config/services.yaml
services:
datatable.users:
class: App\DataTables\UsersDataTable
tags: [{ name: datatable, id: users }]
arguments: [ '@doctrine' ]
После этого вы можете вызвать обработчик из действия контроллера. https://github.com/webinarium/DataTablesBundle/wiki#step-3-invoke-the-handler
SomeController.php
// App\Controller\SomeController.php
public function usersAction(Request $request, DataTablesInterface $datatables): JsonResponse
{
//
}
Если вы будете следовать инструкциям в разделе: https://github.com/webinarium/DataTablesBundle/wiki#handlers-service-autoloading, все ваши обработчики будут загружены автоматически.
Спасибо, это гораздо лучше объяснено, чем документация
зачем писать AppBundle\DataTables\UsersDataTable, если путь на самом деле src/DataTables/UsersDataTable.php
Мой плохой (копипаст) отредактировал свой ответ. Убедитесь, что вы написали пространство имен своего класса.
Если вы следовали документации, вы видите, что они помещают свои обработчики в: AppBundle \ DataTables \ UsersDataTable и регистрируют его как службу: github.com/webinarium/DataTablesBundle/…