PHP – CSV – 書き出し – SplFileObject

概要

SplFileObjectによるCSVファイルへの書き出しについて整理する。

  • ファイル名を指定してSplFileObjectのインスタンスを生成
    • $file = new \SplFileObject('CSVファイルパス', 'a'); 
    • $open_mode='a'(書き出し・追記)を設定
  • アクションの引数で指定したRequestオブジェクトからフォームパラメーターを読み込み、CSV書込み用の配列変数にセット
    • $request->input('INPUT要素名');
  • 配列の内容をファイルへ書き出し
    • $file.fputcsv(1行分の配列変数);
    • 必要に応じて引数で区切り・囲み・エスケープ記号を指定
  • ファイルをクローズ
    • $file = null;
  • 更新後のデータで表示するようリダイレクト

基本例

例として以下のようなアプリケーションを考える。CSVファイルの読み込み手順は”CSV – 読み込み“の内容と同じ。

  • GETリクエストに応じて
    • 入力フォームを表示する
    • フォームの下にCSVファイルの内容を表示する
  • フォームに入力し送信ボタンを押してPOSTリクエスト
    • 入力された内容をCSVファイルに追加書き出し
    • 更新後のデータを表示するためリダイレクト

ルーティング

以下の様にルーティングする。

コントローラー~GET・表示処理

CSV – 読み込み“と同じ手順でCSVファイルを読み込み、ビューに引き継ぐ。

  • SplFileObjectインスタンスの生成
    • storage/appディレクトリーに配置したCSVファイルを指定
    • storage_path()関数を利用してパスを取得
  • CSV読み込みのためのフラグセット
  • 行単位で読み込み配列に格納
  • データをビューに引き継いでレンダリング

ビュー

表示

この例でのビューの表示内容は以下の2つ

  • CSVファイルに追加するデータのフォーム
  • コントローラーから引き継いだCSV読み込みデータの内容を表示

ビューのうちbody要素内のBladeコードは以下のとおり。form要素内の冒頭に@csrfでCSRF対策を指定している。

CSVにデータが2行だけ登録されている状態の、ブラウザーの表示例は以下のとおり。

フォーム入力・POST

上記のフォームに追加するデータを入力し、保存ボタンで登録のためのPOSTリクエスト。

コントローラー~POST・登録処理

ビューのフォームからPOSTされたパラメーターを、CSVファイルに追加する。

コード

POSTパラメーターの取得・変数セット

  • アクションの引数でRequestオブジェクトを受け取り、input()メソッドで各パラメーターを取得
  • 取得したパラメーターを行データの配列にセット

行データのCSVファイルへの追加

  • fputcsv()メソッドで行データをCSVファイルに追加
  • 追加後にSplFileObjectの変数にnullを代入し、ファイルクローズ相当の処理をしている

リダイレクト

保存されたCSVデータが反映された状態で再表示するため、リダイレクトを指示している。

return redirect('ルーティング先');

  • view()によるレンダリングはビューファイルを指定して再表示
  • redirect()によるリダイレクトはルーティング設定のURIを指定してコントローラーから実行

再表示結果

CSVファイルに追加されたデータが反映されている。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です