Search code examples
excellaravelexportexport-to-excellaravel-5.6

How can I solve "too few arguments to function App\Exports\ItemsExport::__construct(), 0 passed" in the export excel laravel?


I make export classes exportable in the App/Exports like this :

<?php
namespace App\Exports;
use App\Repositories\ItemRepository;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
class ItemsExport implements FromCollection
{
    use Exportable;
    protected $itemRepository;
    public function __construct(ItemRepository $itemRepository)
    {
        $this->itemRepository = $itemRepository;
    }
    public function collection()
    {
        return $this->itemRepository->getItem();
    }
}

I call from controller like this :

return (new ItemsExport)->download('items.xlsx');

There exist error like this :

too few arguments to function App\Exports\ItemsExport::__construct(), 0 passed

How can I solve this error?

I get export excel from this tutorial :https://laravel-excel.maatwebsite.nl/docs/3.0/export/basics


Solution

  • In order to use Laravel's dependency injection you need to construct the new instance via the application container:

    return app()->make(ItemsExport::class)->download('items.xlsx');
    

    This assumes that the applications knows how to construct the ItemRepository

    Alternatively if this is in a controller action you can just inject it e.g.

    public function controllerAction(ItemsExport $exporter) {
         return $exporter->download('items.xlsx');
    }