Laravel-Excel اخیرا بسته جدید نسخه 3.0 را منتشر کرد که تغییرات بسیار زیادی از نسخه های قبلی داشت. در زیر یک مثال ساده را مشاهده می کنیم:
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
class InvoicesExport implements FromCollection
{
public function collection()
{
return Invoice::all();
}
}
شما باید یک کلاس جداگانه برای export ایجاد کنید و شما می توانید collection را برای export تعریف کنید. راه های دیگری نیز برای export داده وجود دارد: از query:
class InvoicesExport implements FromQuery
{
use Exportable;
public function query()
{
return Invoice::query();
}
}
از view html table می توانید به شکل زیر استفاده کنید:
class InvoicesExport implements FromView
{
public function view(): View
{
return view('exports.invoices', [
'invoices' => Invoice::all()
]);
}
}
تصور کنید آرایه زیر را داریم:
[
[
'name' => 'Povilas',
'surname' => 'Korop',
'email' => 'povilas@laraveldaily.com',
'twitter' => '@povilaskorop'
],
[
'name' => 'Taylor',
'surname' => 'Otwell',
'email' => 'taylor@laravel.com',
'twitter' => '@taylorotwell'
]
]
چگونه می توان آرایه را به اکسل منتقل کرد:
کلاس export ما به شکل زیر خواهد بود.
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;
class CollectionExport implements FromCollection, WithHeadings
{
use Exportable;
public function collection()
{
return collect([
[
'name' => 'Povilas',
'surname' => 'Korop',
'email' => 'povilas@laraveldaily.com',
'twitter' => '@povilaskorop'
],
[
'name' => 'Taylor',
'surname' => 'Otwell',
'email' => 'taylor@laravel.com',
'twitter' => '@taylorotwell'
]
]);
}
public function headings(): array
{
return [
'Name',
'Surname',
'Email',
'Twitter',
];
}
}
شما با استفاده از متد collection و laravel collect، می توانید برای انتقال آرایه به آن استفاده کنید:
return Excel::download(new CollectionExport(), 'export.xlsx');
سپس شما این را به عنوان نتیجه دانلود دریافت می کنید:
شما می توانید به شکل زیر یک ویو بسازید:
سپس شما می توانید کلاس export خود را به شکل زیر بسازید:
namespace App\Exports;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
class BladeExport implements FromView
{
public function view(): View
{
return view('exports.xml', [
'data' => [
[
'name' => 'Povilas',
'surname' => 'Korop',
'email' => 'povilas@laraveldaily.com',
'twitter' => '@povilaskorop'
],
[
'name' => 'Taylor',
'surname' => 'Otwell',
'email' => 'taylor@laravel.com',
'twitter' => '@taylorotwell'
]
]
]);
}
}
کنترلر مثل قبل نوشته می شود فقط نام کلاس تغییر می کند:
return Excel::download(new BladeExport(), 'export.xlsx');
شما با استفاده از dependency injection می توانید داده به کلاس export تزریق کنید. به مثال زیر توجه کنید:
class BladeExport implements FromView
{
private $data;
public function __construct($data)
{
$this->data = $data;
}
public function view(): View
{
return view('exports.xml', [
'data' => $this->data
]);
}
}
سپس از کلاس بالا به شکل زیر استفاده می کنیم:
$data = [
[
'name' => 'Povilas',
'surname' => 'Korop',
'email' => 'povilas@laraveldaily.com',
'twitter' => '@povilaskorop'
],
[
'name' => 'Taylor',
'surname' => 'Otwell',
'email' => 'taylor@laravel.com',
'twitter' => '@taylorotwell'
]
];
return Excel::download(new BladeExport($data), 'export.xlsx');