csvファイル
storage/app/address_list.csv
山田太郎,東京都港区,t.yamada@test.com
佐藤花子,東京都杉並区,h.sato@test.com
山本二郎,東京都豊島区,j.yamamoto@test.com
田中三郎,神奈川県横浜市,s.tanaka@test.com
斎藤さくら,東京都台東区,s.saitou@test.com
加藤桃,東京都世田谷区,m.kato@test.com
k,k,k
ルーティング
/routes/web.php
<?php
Route::get('/address_list', 'SampleController@addressList');
Route::post('/address_list', 'SampleController@addressWrite');
コントローラー
app/Http/Controllers/SampleController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SampleController extends Controller{
public function addressList(){
// SplFileObjectの作成
$file = new \SplFileObject(storage_path('app/address_list.csv'));
// 読み込み設定
$file->setFlags(
\SplFileObject::READ_CSV | // CSVを配列形式で読み込む
\SplFileObject::READ_AHEAD |
\SplFileObject::SKIP_EMPTY | // 前の行と合わせて、空行があったら読み飛ばす
\SplFileObject::DROP_NEW_LINE // 改行コードは無視する
);
// 1行ずつ読み込んで配列に保存
$members = [];
foreach($file as $member){
$members[] = $member;
}
return view('samples.address_list', [
'title' => 'メールアドレス帳',
'members' => $members,
]);
}
// ----書き込み-------------------------------------------------------------------
public function addressWrite(Request $request){
// SplFileObjectを追記モードで作成
$file = new \SplFileObject(storage_path('app/address_list.csv'), 'a');
// 送信データから書き込み用の配列を作成
$member = [
$request->input('name'),
$request->input('address'),
$request->input('mail'),
];
// csvファイルに書き込み
$file->fputcsv($member);
// 一覧表示画面にリダイレクト
return redirect('/address_list');
}
}
ビュー
resources/views/samples/csv_sample.blade.php
@extends('layouts.default')
@section('title', $title)
@section('content')
<h1>{{ $title }}</h1>
<form method="post" action="{{ url('/address_list') }}">
@csrf
<div>
<label>
名前:
<input type="text" name="name">
</label>
</div>
<div>
<label>
住所:
<input type="text" name="address">
</label>
</div>
<div>
<label>
メールアドレス:
<input type="text" name="mail">
</label>
</div>
<div>
<input type="submit" name="登録">
</div>
</form>
<table>
<tr>
<th>名前</th>
<th>住所</th>
<th>メールアドレス</th>
</tr>
@foreach($members as $member)
<tr>
<td> {{ $member[0] }} </td>
<td> {{ $member[1] }} </td>
<td> {{ $member[2] }} </td>
</tr>
@endforeach
</table>
@endsection
共通レイアウトファイル
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>@yield('title')</title>
<style>
.header_nav {
display: flex;
list-style: none;
padding-left: 0;
}
.header_nav li {
margin-right: 30px;
}
/* エラーメッセージ用のスタイル */
.error {
color: red;
}
</style>
</head>
<body>
@yield('header')
{{-- エラーメッセージを出力 --}}
@foreach($errors->all() as $error)
<p class="error">{{ $error }}</p>
@endforeach
@yield('content')
</body>
</html>