Laravel-datatables: Não foi possível instalar o pacote para Laravel 6.0

Criado em 2 out. 2019  ·  14Comentários  ·  Fonte: yajra/laravel-datatables

ErrorException: argumento inválido fornecido para foreach ()


Tentei executar este comando para instalar composer require yajra/laravel-datatables-oracle e vi a mensagem abaixo

Using version ^9.7 for yajra/laravel-datatables-oracle
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> <strong i="9">@php</strong> artisan package:discover --ansi

   ErrorException  : Invalid argument supplied for foreach()

  at /var/www/atd-inspector/vendor/yajra/laravel-datatables-oracle/src/DataTablesServiceProvider.php:45
    41|      */
    42|     public function boot()
    43|     {
    44|         $engines = config('datatables.engines');
  > 45|         foreach ($engines as $engine => $class) {
    46|             $engine = Str::camel($engine);
    47| 
    48|             if (! method_exists(DataTables::class, $engine) && ! DataTables::hasMacro($engine)) {
    49|                 DataTables::macro($engine, function () use ($class) {

  Exception trace:

  1   Illuminate\Foundation\Bootstrap\HandleExceptions::handleError("Invalid argument supplied for foreach()", "/var/www/atd-inspector/vendor/yajra/laravel-datatables-oracle/src/DataTablesServiceProvider.php", [])
      /var/www/atd-inspector/vendor/yajra/laravel-datatables-oracle/src/DataTablesServiceProvider.php:45

  2   Yajra\DataTables\DataTablesServiceProvider::boot()
      /var/www/atd-inspector/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32

  Please use the argument -v to see more details.
Script <strong i="10">@php</strong> artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1

Installation failed, reverting ./composer.json to its original content.

  • Sistema operacional: Ubuntu 19.10
  • Versão PHP: 7.3.9-1
  • Versão do Laravel: 6.0
  • Versão Laravel-Datatables
can't replicate need feedback

Comentários muito úteis

Parece que é um problema com a descoberta automática de pacotes no Laravel. Se você copiar o arquivo de configuração datatables.php para o diretório de configuração do Laravel e então executar o php artisan config: clear it works. Parece que a descoberta do pacote está executando o método de inicialização antes que o arquivo de configuração esteja disponível para fornecer o array engines.

Todos 14 comentários

2156

Você está atualizando ou usando uma nova instalação? Tente remover a configuração existente se você já publicou.

O mesmo para mim. Estou usando laravel com modo de depuração e teste (não de produção) no localhost.
Qualquer solução?
Valeu.

Resolvi a edição vendor / yajra / laravel-datatables-oracle / src / DataTablesServiceProvider.php
editando $ engines para:

$engines = [ 'eloquent' => Yajra\DataTables\Engines\EloquentEngine::class, 'query' => Yajra\DataTables\Engines\QueryBuilderEngine::class, 'collection' => Yajra\DataTables\Engines\CollectionEngine::class, // add your custom engine ];
E então faça o comando novamente

composer requer yajra / laravel-datatables-oracle: "~ 9.0"

Então você precisa adicionar em confi / app.php as duas linhas conforme dito no post de instalação e então executar o comando:

fornecedor de artesão php
E
php artisan config: cache

E funciona !!

Tendo o mesmo problema. Alguma correção para este ainda?

Parece que é um problema com a descoberta automática de pacotes no Laravel. Se você copiar o arquivo de configuração datatables.php para o diretório de configuração do Laravel e então executar o php artisan config: clear it works. Parece que a descoberta do pacote está executando o método de inicialização antes que o arquivo de configuração esteja disponível para fornecer o array engines.

@yajra, existe alguma solução para isso?

Esperava encontrar uma solução para isso nas últimas semanas. Editar /vendor arquivos com conteúdo estático de um arquivo de configuração é uma solução alternativa, mas não uma correção.

Analisará e tentará replicar o problema.

Experimentei uma instalação nova do Laravel e funciona bem.

> laravel new 2202
........

> composer require yajra/laravel-datatables-oracle
Using version ^9.7 for yajra/laravel-datatables-oracle
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing yajra/laravel-datatables-oracle (v9.7.1): Loading from cache
yajra/laravel-datatables-oracle suggests installing yajra/laravel-datatables-buttons (Plugin for server-side exporting of dataTables.)
yajra/laravel-datatables-oracle suggests installing yajra/laravel-datatables-html (Plugin for server-side HTML builder of dataTables.)
yajra/laravel-datatables-oracle suggests installing yajra/laravel-datatables-fractal (Plugin for server-side response using Fractal.)
yajra/laravel-datatables-oracle suggests installing yajra/laravel-datatables-editor (Plugin to use DataTables Editor (requires a license).)
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> <strong i="6">@php</strong> artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: yajra/laravel-datatables-oracle
Package manifest generated successfully.

Alguém pode fornecer algumas etapas para replicar isso? Obrigado!

Acabei de fazer uma nova instalação e tenho o mesmo problema.

Casting config('datatables.engines') explicitamente em um array parece resolvê-lo, fazendo com que ele passe null para foreach .

- $engines = config('datatables.engines');
+ $engines = (array) config('datatables.engines');

Mesmo problema aqui, não consigo executar nenhum comando artesanal ou qualquer coisa e todo o site travou com este erro. Ser capaz de replicar o problema não deve ser necessário para fornecer uma solução alternativa como a de @mtvbrianking , pois esse problema está impedindo uma implantação limpa.

Considere mitigar esse problema, mesmo que você não consiga replicá-lo.

@filliph é claro. O problema é que para mim é difícil consertar algo que não consigo replicar. Um PR de
a comunidade seria uma grande ajuda para isso.

@mtvbrianking , você se importaria de enviar um PR sobre como você corrigiu o problema?

Parece que é um problema com a descoberta automática de pacotes no Laravel. Se você copiar o arquivo de configuração datatables.php para o diretório de configuração do Laravel e então executar o php artisan config: clear it works. Parece que a descoberta do pacote está executando o método de inicialização antes que o arquivo de configuração esteja disponível para fornecer o array engines.

Obrigado, ^ _ ^

Esta página foi útil?
0 / 5 - 0 avaliações