Как подписаться на сервис DataTableFactory? - PullRequest
1 голос
/ 15 мая 2019

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

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

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

Служба "Omines\DataTablesBundle\DataTableFactory" не найдена: даже если она существует в контейнере приложения, контейнер внутри "App\Controller\StaffController" меньшесервисный локатор, который знает только о "doctrine", "form.factory", "http_kernel", "parameter_bag", "request_stack", "router", "security.authorization_checker", "Услуги security.csrf.token_manager "," security.token_storage "," serializer "," session "и" twig ".Вместо этого попробуйте использовать внедрение зависимостей

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

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

Если вместо этого используется AbstractController, что является рекомендуемой практикой, убедитесь, что вы подписались на услугу DataTableFactory самостоятельно.В качестве альтернативы вы можете обойти удобную черту и внедрить сервис с помощью обычного инжектора конструктора

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

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

1 Ответ

1 голос
/ 15 мая 2019

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

Добавьте конструктор к вашему контроллеру и введите 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...