Export file Laravel với Maatwebsite 3.0
1. Giới thiệu Bài viết này mình sẽ hướng dẫn các bạn cách export file trong laravel với package maatwebsite 3.0 . Mình viết bài này vì trong project mình đang làm có sử dụng đến chức năng này và search trên mạng thì rất nhiều bài hướng dẫn với phiên bản maatwebsite 2.1 còn với 3.0 thì khá ít ...
1. Giới thiệu
Bài viết này mình sẽ hướng dẫn các bạn cách export file trong laravel với package maatwebsite 3.0. Mình viết bài này vì trong project mình đang làm có sử dụng đến chức năng này và search trên mạng thì rất nhiều bài hướng dẫn với phiên bản maatwebsite 2.1 còn với 3.0 thì khá ít và cũng không có link vietsub nào nên mình sẽ viết bài này để hướng dẫn các bạn muốn dùng với phiên bản 3.0 nhé. Cũng vẫn là làm việc với maatwebsite nhưng cách áp dụng có đôi chút khác nhau mình sẽ giới làm ví dụ cụ thể trong bài để các bạn có thể áp dụng ngay và thực hành.
2. Cài đặt package
Version | Laravel | Version |
---|---|---|
3.0 | ^5.5 | ^7.0 |
Bài này mình sẽ hướng dẫn trên môi trường Laravel 5.5.
Yêu cầu gói maatwebsite trong composer.json của dự án Laravel của bạn. Điều này sẽ tải xuống gói và PhpSpreadsheet. Đầu tiên chắc chắn là chạy composer require package:
composer require maatwebsite/excel
Thêm vào ServiceProvider itrong config/app.php
'providers' => [ /* * Package Service Providers... */ MaatwebsiteExcelExcelServiceProvider::class, ]
Add the Facade in config/app.php
'aliases' => [ ... 'Excel' => MaatwebsiteExcelFacadesExcel::class, ]
Để publish config, chạy vendor publish command:
php artisan vendor:publish
Câu lệnh này sẽ tạo ra một file trong config là excel.php Vậy là đã xong bước cài đặt rồi!
3. Export file
Mình sẽ lấy một ví dụ về xuất đơn hàng để các bạn có thể hình dung rõ hơn. Đầu tiên là tạo một route để khi click xuất file.
<div class="export"> <a href="{{ route('export') }}" class="btn btn-info export" id="export-button"> Export file </a> </div>
Tiếp theo là chúng ta sẽ vào routes/web.php để tạo route trên
Route::get('export','ExportController@export')->name('export');
Bước tiếp theo là tạo controller ExportController
run command php artisan make:controller ExportController
Giờ chúng ta đã có controller rồi tiếp theo vào controller thêm những dòng này dưới namspaces để chúng ta có thể sử dụng package vừa cài nhé.
use Excel; use MaatwebsiteExcelConcernsFromCollection; use MaatwebsiteExcelConcernsExportable; use MaatwebsiteExcelConcernsWithHeadings;
Class ExporController sẽ được implements từ 2 Interface FromCollection và WithHeadings
class ExportController extends Controller implements FromCollection, WithHeadings
Trong controller này chúng ta sẽ sử dụng trait Exportable, viết dòng dưới này ở trong class ExportController.
use Exportable;
Giờ đến bước lấy dữ liệu chúng ta sẽ xuất file. Tiếp theo là chúng ta sẽ implements phương thức collection() của MaatwebsiteExcelConcernsFromCollection.
Trong collection() chúng ta sẽ lấy dữ liệu muốn xuất file Ví dụ dưới đây là mình muốn xuất file của đơn hàng
public function collection() { $orders = Don_hang::all(); foreach ($orders as $row) { $order[] = array( '1' => $row->id, '2' => $row->ten, '3' => $row->dia_chi, '4' => $row->email, '5' => $row->thoi_gian, '6' => number_format($row->thanh_toan), ); } return (collect($order)); }
Tạo tiêu đề các cột của bảng
public function headings(): array { return [ 'id', 'Tên', 'Địa chỉ', 'Email', 'Ngày đặt hàng', 'Tổng', ]; }
Việc cuối cùng là tiến hành download
public function export(){ return Excel::download(new ExcelController(), 'orders.xlsx'); }
Giờ hãy ấn nút Export file thôi. Và đây là kết quả sau khi xuất file.
Vậy là mình đã hướng dẫn các bạn cách xuất file với laravel sử dụng maatwebsite 3.0, đây là một package rất hay, các bạn có thể import file hay export ra file xlxs, csv... Các bạn có thể lên trang chủ tìm hiểu thêm nhé link tham khảo: https://laravel-excel.maatwebsite.nl/3.0/ và https://laravel-news.com/laravel-excel-3-0