Commit e3b436e7 authored by Artem's avatar Artem

add products table export to excel

parent 3deb5648
<?php
namespace App\Exports;
use App\Product;
use Maatwebsite\Excel\Concerns\FromCollection;
class ProductsExport implements FromCollection
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return Product::all();
}
}
......@@ -2,8 +2,11 @@
namespace App\Http\Controllers;
use App\Exports\ProductsExport;
use App\Product;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
//use DB;
class ProductController extends Controller
......@@ -144,4 +147,8 @@ class ProductController extends Controller
]);
}
public function export()
{
return Excel::download(new ProductsExport(), 'products.xlsx');
}
}
......@@ -17,4 +17,9 @@ class ProfileController extends Controller
$orders = Auth::user()->orders->reverse() ; // ->take(10)
return view('profile.orders', compact('orders'));
}
public function exportIndex()
{
return view('profile.export-products');
}
}
......@@ -13,7 +13,8 @@
"fruitcake/laravel-cors": "^1.0",
"guzzlehttp/guzzle": "^6.3",
"laravel/framework": "^7.0",
"laravel/tinker": "^2.0"
"laravel/tinker": "^2.0",
"maatwebsite/excel": "^3.1"
},
"require-dev": {
"facade/ignition": "^2.0",
......
This diff is collapsed.
<?php
use Maatwebsite\Excel\Excel;
return [
'exports' => [
/*
|--------------------------------------------------------------------------
| Chunk size
|--------------------------------------------------------------------------
|
| When using FromQuery, the query is automatically chunked.
| Here you can specify how big the chunk should be.
|
*/
'chunk_size' => 1000,
/*
|--------------------------------------------------------------------------
| Pre-calculate formulas during export
|--------------------------------------------------------------------------
*/
'pre_calculate_formulas' => false,
/*
|--------------------------------------------------------------------------
| CSV Settings
|--------------------------------------------------------------------------
|
| Configure e.g. delimiter, enclosure and line ending for CSV exports.
|
*/
'csv' => [
'delimiter' => ',',
'enclosure' => '"',
'line_ending' => PHP_EOL,
'use_bom' => false,
'include_separator_line' => false,
'excel_compatibility' => false,
],
],
'imports' => [
'read_only' => true,
'heading_row' => [
/*
|--------------------------------------------------------------------------
| Heading Row Formatter
|--------------------------------------------------------------------------
|
| Configure the heading row formatter.
| Available options: none|slug|custom
|
*/
'formatter' => 'slug',
],
/*
|--------------------------------------------------------------------------
| CSV Settings
|--------------------------------------------------------------------------
|
| Configure e.g. delimiter, enclosure and line ending for CSV imports.
|
*/
'csv' => [
'delimiter' => ',',
'enclosure' => '"',
'escape_character' => '\\',
'contiguous' => false,
'input_encoding' => 'UTF-8',
],
],
/*
|--------------------------------------------------------------------------
| Extension detector
|--------------------------------------------------------------------------
|
| Configure here which writer type should be used when
| the package needs to guess the correct type
| based on the extension alone.
|
*/
'extension_detector' => [
'xlsx' => Excel::XLSX,
'xlsm' => Excel::XLSX,
'xltx' => Excel::XLSX,
'xltm' => Excel::XLSX,
'xls' => Excel::XLS,
'xlt' => Excel::XLS,
'ods' => Excel::ODS,
'ots' => Excel::ODS,
'slk' => Excel::SLK,
'xml' => Excel::XML,
'gnumeric' => Excel::GNUMERIC,
'htm' => Excel::HTML,
'html' => Excel::HTML,
'csv' => Excel::CSV,
'tsv' => Excel::TSV,
/*
|--------------------------------------------------------------------------
| PDF Extension
|--------------------------------------------------------------------------
|
| Configure here which Pdf driver should be used by default.
| Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF
|
*/
'pdf' => Excel::DOMPDF,
],
'value_binder' => [
/*
|--------------------------------------------------------------------------
| Default Value Binder
|--------------------------------------------------------------------------
|
| PhpSpreadsheet offers a way to hook into the process of a value being
| written to a cell. In there some assumptions are made on how the
| value should be formatted. If you want to change those defaults,
| you can implement your own default value binder.
|
*/
'default' => Maatwebsite\Excel\DefaultValueBinder::class,
],
'transactions' => [
/*
|--------------------------------------------------------------------------
| Transaction Handler
|--------------------------------------------------------------------------
|
| By default the import is wrapped in a transaction. This is useful
| for when an import may fail and you want to retry it. With the
| transactions, the previous import gets rolled-back.
|
| You can disable the transaction handler by setting this to null.
| Or you can choose a custom made transaction handler here.
|
| Supported handlers: null|db
|
*/
'handler' => 'db',
],
'temporary_files' => [
/*
|--------------------------------------------------------------------------
| Local Temporary Path
|--------------------------------------------------------------------------
|
| When exporting and importing files, we use a temporary file, before
| storing reading or downloading. Here you can customize that path.
|
*/
'local_path' => sys_get_temp_dir(),
/*
|--------------------------------------------------------------------------
| Remote Temporary Disk
|--------------------------------------------------------------------------
|
| When dealing with a multi server setup with queues in which you
| cannot rely on having a shared local temporary path, you might
| want to store the temporary file on a shared disk. During the
| queue executing, we'll retrieve the temporary file from that
| location instead. When left to null, it will always use
| the local path. This setting only has effect when using
| in conjunction with queued imports and exports.
|
*/
'remote_disk' => null,
'remote_prefix' => null,
],
];
......@@ -9,4 +9,9 @@
href="{{ route('profile.orders') }}"
>My orders</a>
</li>
<li class="nav-item">
<a class="nav-link {{ Request::url() === route('profile.export-products-view') ? 'active' : '' }}"
href="{{ route('profile.export-products-view') }}"
>Export products</a>
</li>
</ul>
@extends('layouts.profile')
@section('profile-content')
<p>We allow you to download all our products from database. Feel free to create your own webshop.
We even can share our distributors contacts, feel free to ask us about it.</p>
<form action="{{ route('export-products') }}" method="POST">
@csrf
<button class="btn btn-success mx-auto d-block">Download our products</button>
</form>
@endsection
......@@ -41,6 +41,8 @@ Route::middleware('auth')->prefix('profile')->group(function() {
Route::get('/', 'ProfileController@index')->name('profile');
Route::get('/personal', 'ProfileController@index')->name('profile.index');
Route::get('/orders', 'ProfileController@showOrders')->name('profile.orders');
Route::get('/export-products', 'ProfileController@exportIndex')->name('profile.export-products-view');
Route::post('/export-products', 'ProductController@export')->name('export-products');
});
Route::redirect('order', '/'); // TODO to ask if there is a way to show 404 and not use redirect
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment