Как подписаться на сервис DataTableFactory?

Я пытаюсь использовать DataTablesBundle в Symfony 4.2.

Существует очень хорошее руководство и стартер, однако он используется с классом extends Controller. Но я пытаюсь использовать его с AbstractController сорт.

Итак, у меня есть такая проблема:

Service "Omines\DataTablesBundle\DataTableFactory" not found: even though it exists in the app's container, the container inside "App\Controller\StaffController" is a smaller service locator that only knows about the "doctrine", "form.factory", "http_kernel", "parameter_bag", "request_stack", "router", "security.authorization_checker", "security.csrf.token_manager", "security.token_storage", "serializer", "session" and "twig" services. Try using dependency injection instead

Я нашел решение, однако я только начал работать с Symfony, поэтому я не совсем понял, о чем идет речь:

https://github.com/omines/datatables-bundle/commit/cd9b93eac9ef4fd3c1459305c71ca6e2ac0c444e

If using AbstractController instead, which is currently recommended practice, ensure you subscribe to the DataTableFactory service yourself. Alternatively you can bypass the convenience trait and inject the service via regular constructor injection

Как подписаться на сервис DataTableFactory?

И что означает альтернатива «обойти черту удобства и внедрить сервис»?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
847
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не знаю, как подписаться на услугу, но вот как ее ввести.

Добавьте конструктор в свой контроллер и внедрите DataTableFactory:

//use Omines\DataTablesBundle\DataTableFactory;

private $factory;

public function __construct(
    DataTableFactory $factory
) {
    $this->factory = $factory;
}

/**
 * Creates and returns a basic DataTable instance.
 *
 * @param array $options Options to be passed
 * @return DataTable
 */
protected function createDataTable(array $options = [])
{
    return $this->factory->create($options);
}

/**
 * Creates and returns a DataTable based upon a registered DataTableType or an FQCN.
 *
 * @param string $type FQCN or service name
 * @param array $typeOptions Type-specific options to be considered
 * @param array $options Options to be passed
 * @return DataTable
 */
protected function createDataTableFromType($type, array $typeOptions = [], array $options = [])
{
    return $this->factory->createFromType($type, $typeOptions, $options);
}

Затем вы можете использовать его следующим образом:

$this->createDateTable();

Спасибо за поддержку. К сожалению, это решение не сработало для меня. У меня появилось сообщение об ошибке: Попытка вызвать неопределенный метод с именем «createDataTable» класса «Omines\DataTablesBundle\DataTableFactory».

szerz 15.05.2019 12:00

DataTableFactory не имеет этой функции. Есть только create() и createFromType() github.com/omines/datatables-bundle/blob/master/src/…

Vyctorya 15.05.2019 12:06

Может быть, вам нужно ввести другой класс? Пакетом не пользуюсь, не знаю.

Vyctorya 15.05.2019 12:07

Это внутри этого признака: github.com/omines/datatables-bundle/blob/master/src/Controll‌​er/…

szerz 15.05.2019 12:08

Ага. Я вижу, что могу поместить это прямо в класс. Спасибо большое за вашу поддержку. Вы мне очень помогли. Теперь это работает. Желаю вам успехов во всех ваших проектах и ​​планах!

szerz 15.05.2019 12:13

Другие вопросы по теме