LoginSignup
0
0

More than 1 year has passed since last update.

Laravel 課題2・メールアドレス帳の作成

Last updated at Posted at 2021-06-10

image.png

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>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0