Я пытаюсь использовать 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
AbstractControllerinstead, which is currently recommended practice, ensure you subscribe to theDataTableFactoryservice yourself. Alternatively you can bypass the convenience trait and inject the service via regular constructor injection
Как подписаться на сервис DataTableFactory?
И что означает альтернатива «обойти черту удобства и внедрить сервис»?






Я не знаю, как подписаться на услугу, но вот как ее ввести.
Добавьте конструктор в свой контроллер и внедрите 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();
DataTableFactory не имеет этой функции. Есть только create() и createFromType() github.com/omines/datatables-bundle/blob/master/src/…
Может быть, вам нужно ввести другой класс? Пакетом не пользуюсь, не знаю.
Это внутри этого признака: github.com/omines/datatables-bundle/blob/master/src/Controller/…
Ага. Я вижу, что могу поместить это прямо в класс. Спасибо большое за вашу поддержку. Вы мне очень помогли. Теперь это работает. Желаю вам успехов во всех ваших проектах и планах!
Спасибо за поддержку. К сожалению, это решение не сработало для меня. У меня появилось сообщение об ошибке: Попытка вызвать неопределенный метод с именем «createDataTable» класса «Omines\DataTablesBundle\DataTableFactory».