반응형
라라벨 공부
개요
이전 글에서 사용한 Laravel Excel 라이브러리를 사용해 난수 엑셀 생성기를 만들어 봅시다.
Laravel Excel를 설치하지 않으셨다면 아래 글을 참고해주시기 바랍니다.
시작
Controller와 Export 클래스를 만들어 줍시다.
php artisan make:controller RandomGeneratorController
php artisan make:export RandomGeneratorExport
라우팅 설정을 위해 web.php에 아래 코드를 추가해줍시다.
이번에는 view 연결 없이 주소 접근을 통해 간단하게 다운로드해보도록 합시다.
Route::get('random',[RandomGeneratorController::class,'export'])->name('random.export');
Controller는 아래와 같이 간단하게 만들어 줍시다.
<?php
namespace App\Http\Controllers;
use App\Exports\RandomGeneratorExport;
use Maatwebsite\Excel\Facades\Excel;
class RandomGeneratorController extends Controller
{
public function export()
{
$date = date('Y-m-d');
return Excel::download(new RandomGeneratorExport(), 'random_number_'.$date.'.csv');
}
}
이제 RandomGeneratorExport를 정의해줍시다.
<?php
namespace App\Exports;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\FromCollection;
class RandomGeneratorExport implements FromCollection
{
private $length, $count, $source;
/**
* @param $length int 문자길이
* @param $count int 난수 개수
* @param $source string 난수에 사용할 재료
*/
public function __construct($length = 8, $count = 10, $source = '123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'){
$this->length = $length;
$this->count = $count;
$this->source = $source;
}
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
$randomNumbers = [];
for($index = 1; $index <= $this->count; $index++){
$randomNumbers[] = [$index, $this->getRandomNumber()];
}
return new Collection($randomNumbers);
}
/**
* 랜덤 난수 생성
* @return string
*/
public function getRandomNumber(){
$result = '';
for($index = 0; $index < $this->length; $index++){
$result .= str_shuffle($this->source)[0];
}
return $result;
}
}
생성자로 기본 설정을 넣어주었으나, 필요시 인스턴스화 할 때 전달 인자로 값을 쉽게 바꿀 수 있습니다.
Controller에서 아래와 같이 바꿀 경우 10자리의 난수를 100개 만들 수 있습니다.
[수정 전]
return Excel::download(new RandomGeneratorExport(), 'random_number_'.$date.'.csv');
[수정 후]
return Excel::download(new RandomGeneratorExport(10, 100), 'random_number_'.$date.'.csv');
주소를 /random으로 이동시 액셀을 다운로드할 수 있습니다
정리
Fast Excel가 속도는 훨씬 좋았으나 Laravel Excel이 역시 더 자유롭네요.
해당 포스트에서 만든 csv를 이용해 seeder을 통해 테이블에 저장하는 포스트를 올렸습니다.
참고해주세요, 바로가기
반응형
'PHP > Laravel' 카테고리의 다른 글
Laravel9 이미지 업로드 (with Dropzone) 2부 : Index & Destroy & Ajax (0) | 2022.08.30 |
---|---|
Laravel9 이미지 업로드 (with Dropzone) 1부 : Setting & Create & Image Upload (0) | 2022.08.29 |
Laravel9 라라벨 액셀 다운로드 (Laravel-Excel) (0) | 2022.08.19 |
Laravel9 라라벨 액셀 다운로드 (Fast-Excel) (0) | 2022.08.19 |
Laravel 9 CRUD 예제 4부 : 유효성 검사(Validation) (0) | 2022.08.11 |