こんにちは! とびろぐ管理人のとびうおです!
今回は、laravel 10におけるcsvインポート機能の作成の方法について解説してきます!
今回は、PHP Spreadsheet というのを使って、インポートを行っていきたいと思います!
Laravelでwebポートフォリオを簡単に作れるようになる本を出しました
PHP Spreadsheetのインストール
まずは、PHP Spreadsheetをプロジェクトに対してインストールします。
composer を使用して、以下のコマンドを実行してみてください。
composer require phpoffice/phpspreadsheet
// sailを使用している場合↓↓
./vendor/bin/sail composer require phpoffice/phpspreadsheet
PHP Spreadsheetは
とても便利なライブラリだよ!
controllerを準備しよう
次に、csvインポートの処理を行うcontrollerを準備します。
以下のようなartisanコマンドを打って、controllerを準備してみてください!
php artisan make:controller CsvImportController
// sailを使用している場合↓↓
./vendor/bin/sail composer require phpoffice/phpspreadsheet
Laravel 10ではsailを使って
環境構築を行なっている人も多いので、
sailのバージョンも追加しておいたよ!
ルーティングの設定
続いて、web.phpにcsvインポート用のルートを追加します。
use App\Http\Controllers\CsvImportController;
Route::get('/import-csv', [CsvImportController::class,"show"]);
Route::post('/import-csv', [CsvImportController::class,"import"]);
csvアップロードのフォームの作成
続いて、bladeを用いて、csvファイルのアップロードフォームを作成しましょう。
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="/import-csv" method="post" enctype="multipart/form-data">
@csrf
<input type="file" name="file">
<button type="submit">インポート</button>
</form>
</body>
</html>
上記のフォームが表示されていれば
OKだよ!
この時form属性にenctype="multipart/form-data"
を追加するのを忘れないようにしましょう。
csv import部分のcontroller
csv import部分のcontrollerは以下のようにすればOKです!
public function import(Request $request)
{
$file = $request->file('file');
$spreadsheet = IOFactory::load($file->getPathName());
$sheetData = $spreadsheet->getActiveSheet()->toArray();
foreach ($sheetData as $row) {
echo implode(', ', $row) . "<br>";
}
}
このように記述しましょう。
そうして、csvをアップロードすると、
このように無事、表示されます!
例のcsvはこちら↓↓
echoしているところを
DBに保存するコードに書き換えてみたりしよう!
PHP Spreadsheetの便利なところ
PHP Spreadsheetの便利なところは、
$spreadsheet = IOFactory::load($file->getPathName());
といったところで、$spreadsheetをオブジェクトのように扱えるところです。
$spreadsheet オブジェクトを使うことで、シートの読み込みや書き込みなどが簡単にできます。
自分で関数を調べてみるとやれる幅が広がるよ!
おわりに
Laravel 10を使用したcsv importの方法についての解説でした。PHP Spreadsheetは大変便利なので、ぜひ使ってみてくださいね!
よい、Laravelライフを!
トビログにはこの他にもたくさんLaravelの記事があります!
ぜひチェックしてみてください↓↓
コメント