Laravel – flash

概要

  • セッションのflash()メソッドは、put()メソッドと同じくセッションにキーと値のデータを登録できる
  • ただしそのデータは、次のリクエストの間だけ保存され、その後は削除される
  • このためflashはコントローラー処理結果の通知などに使われる
  • flashの操作はsession()グローバルヘルパーを使うが、Requestインスタンス経由でもよい

基本形

flashへの登録

session()->flash('キー', 値);
$request->session()->flash('キー', 値);

flashのデータ存在確認

session()->has('キー')

flashのデータ参照

session()->get('キー')

実装例

ビュー

ビューから見た動作は以下の通り

  • GETリクエストでルーティングされ、フォームを表示する
  • ユーザー名を入力後に送信ボタンを押すと、ユーザー名のバリデーション用コントローラーに制御を移す
  • バリデーションの結果、このページにリダイレクトされ、結果に応じて$errorsflashの内容が表示される
  • $errorsはバリデーション結果が妥当でない時に自動でメッセージが登録される
  • flashはバリデーション結果が妥当な時にコントローラーでメッセージを登録する

表示アクション

最初のルーティングで呼ばれ、ビューを初期状態で表示する。

バリデーションアクション

フォームから呼び出され、バリデーションのみを行い、元のページへリダイレクトする。

  • バリデーション結果が妥当でなければ、$errorsにメッセージが登録され、初期ページにリダイレクト
  • バリデーション結果が妥当な時はflashにメッセージを登録して初期ページにリダイレクト

 

Laravel – 各ヘルパーのパス指定

概要

引数にパス文字列を与えて、サーバー上のパスやURLを返すヘルパー。

パス系はpublic_pathのみ挙動が異なるが、全般に以下のように決めておくと紛れがない。

  • 引数を省略、もしくは引数に''を与えると、それぞれのターゲットパスが得られる
  • 引数に'/'を指定してはいけない
  • 引数のパス指定の頭に'/'を付けない
  • 戻り値のパスの後に動的にパスを付加したいといった場合は、以下のいずれか
    • 引数のパス指定の最後に'/'を付ける
    • 引数のパス指定の最後に'/'を付けず、戻り値に明示的に'/'を連結する

URL系はパス系と挙動が異なる。

  • 引数は省略できない
  • 引数に''を与えると、ドメイン名のみのURLが得られる
  • 引数に'/'を与えると、ドメイン名の後ろに’/’が付いたURLが得られる
  • 引数のパスの最後に'/'を付けても付けなくても、結果のURLの最後には'/'は付かない
  • 戻り値のパスの後に動的にパスを付加したいといった場合は、以下の一択
    • 引数のパス指定の最後に'/'を付けても付けなくても、戻り値に明示的に'/'を連結する

サーバーパス系

app_path()~appディレクトリー

Laravelアプリケーションのappディレクトリー下の相対パスを与えて、サーバー上のフルパスを返す。

末尾の'/'の有無で結果が変わる。

絶対パスの形式にすると戻り値のパスがおかしくなる。

  • app_path()app_path('')
    /.../アプリケーションディレクトリー/app
  • app_path('abc/def')
    /.../アプリケーションディレクトリー/app/abc/def
  • app_path('abc/def/')
    /.../アプリケーションディレクトリー/app/abc/def/
  • app_path('/')
    /.../アプリケーションディレクトリー/app//
  • app_path('/abc/def')
    /.../アプリケーションディレクトリー/app//abc/def
  • app_path('/abc/def/')
    /.../アプリケーションディレクトリー/app//abc/def/

base_path()~アプリケーションのベースディレクトリー

Laravelアプリケーションディレクトリー下の相対パスを与えて、サーバー上のフルパスを返す。

末尾の'/'の有無で結果が変わる。

絶対パスの形式にすると戻り値のパスがおかしくなる。

  • base_path()base_path('')
    /.../アプリケーションディレクトリー
  • base_path('abc/def')
    /.../アプリケーションディレクトリー/abc/def
  • base_path('abc/def/')
    /.../アプリケーションディレクトリー/abc/def/
  • base_path('/')
    /.../アプリケーションディレクトリー//
  • base_path('/abc/def')
    /.../アプリケーションディレクトリー//abc/def
  • base_path('/abc/def/')
    /.../アプリケーションディレクトリー//abc/def/

config_path~configディレクトリー

Laravelアプリケーションのcopnfigディレクトリー下の相対パスを与えて、サーバー上のフルパスを返す。

末尾の'/'の有無で結果が変わる。

絶対パスの形式にすると戻り値のパスがおかしくなる。

  • config_path()config_path('')
    /.../アプリケーションディレクトリー/config
  • config_path('abc/def')
    /.../アプリケーションディレクトリー/copnfig/abc/def
  • config_path('abc/def/')
    /.../アプリケーションディレクトリー/copnfig/abc/def/
  • config_path('/abc/def')
    /.../アプリケーションディレクトリー/copnfig//abc/def
  • config_path('/abc/def/')
    /.../アプリケーションディレクトリー/copnfig//abc/def/

public_path~publicディレクトリー

Laravelアプリケーションのpublicディレクトリー下の相対パスまたは絶対パスを与えて、サーバー上のフルパスを返す。

末尾の'/'の有無で結果が変わる。

相対パス・絶対パスいずれの形式も指定可能だが、結果は同じ。

  • public_path()public_path('')
    /.../アプリケーションディレクトリー/public
  • public_path('abc/def')
    /.../アプリケーションディレクトリー/public/abc/def
  • public_path('abc/def/')
    /.../アプリケーションディレクトリー/public/abc/def/
  • public_path('/')
    /.../アプリケーションディレクトリー/
  • public_path('/abc/def')
    /.../アプリケーションディレクトリー/public/abc/def
  • public_path('/abc/def/')
    /.../アプリケーションディレクトリー/public/abc/def/

resource_path~resourcesディレクトリー

Laravelアプリケーションのresourcesディレクトリー下の相対パスを与えて、サーバー上のフルパスを返す。ディレクトリー名は複数のresourcesだがヘルパー名は単数形のresource

末尾の'/'の有無で結果が変わる。

絶対パスの形式にすると戻り値のパスがおかしくなる。

  • resource_path()resource_path('')
    /.../アプリケーションディレクトリー/resources
  • resource_path('abc/def')
    /.../アプリケーションディレクトリー/resources/abc/def
  • resource_path('abc/def/')
    /.../アプリケーションディレクトリー/resources/abc/def/
  • resource_path('/')
    /.../アプリケーションディレクトリー/resources//
  • resource_path('/abc/def')
    /.../アプリケーションディレクトリー/resources//abc/def
  • resource_path('/abc/def/')
    /.../アプリケーションディレクトリー/resources//abc/def/

storage_path~storageディレクトリー

Laravelアプリケーションのstorageディレクトリー下の相対パスを与えて、サーバー上のフルパスを返す。

末尾の'/'の有無で結果が変わる。

絶対パスの形式にすると戻り値のパスがおかしくなる。

  • storage_path()storage_path('')
    /.../アプリケーションディレクトリー/storage
  • storage_path('abc/def')
    /.../アプリケーションディレクトリー/storage/abc/def
  • storage_path('abc/def/')
    /.../アプリケーションディレクトリー/storage/abc/def/
  • storage_path('/')
    /.../アプリケーションディレクトリー/storage//
  • storage_path('/abc/def')
    /.../アプリケーションディレクトリー/storage//abc/def
  • storage_path('/abc/def/')
    /.../アプリケーションディレクトリー/storage//abc/def/

URL系

asset()~publicディレクトリー下のアセット

Laravelアプリケーションのpublicディレクトリー下の相対パスまたは絶対パスを与えて、アセットへのURLを返す。

末尾の'/'の有無は結果に影響しないが、'/'を単独で指定するとドメイン名の後に'/'が付加されたURLになる。

以下の例では、public/abcディレクトリー下のdefファイルを指定していて、ブラウザーに戻り値のURLを指定するとdefファイルの内容が表示される。

  • asset('abc/def')
  • asset('abc/def/')
  • asset('/abc/def')
  • asset('/abc/def/')
    http://ドメイン/abc/def
  • asset('/')
    http://ドメイン/
  • asset()
    →エラー

セキュア―な通信環境下の場合はsecure_asset()を使う。戻り値はhttp→httpsとなったURL。

url()~アプリケーションのURL

Laravelアプリケーションのドメインより後のディレクトリーを与えて、URLを返す。ルーティングで定義したパスを指定するとドメイン名を含んだURLが得られる。パスの指定は相対/絶対のどちらでもよい。

末尾の'/'の有無は結果に影響せず、戻り値の末尾には常に'/'が付かない。

'/'を単独で指定するとドメイン名の後に'/'が付加されたURLになる。

  • url('abc/def')
  • url('abc/def/')
  • url('/abc/def')
  • url('/abc/def/')
    http://ドメイン/abc/def
  • url('/')
    http://ドメイン/
  • asset()
    →エラー

url()ヘルパーを使ってURLに関する様々な情報を得ることができる。

 

Laravel – セッション

セッションの操作

セッションの操作には、session()グローバルヘルパーを利用する方法と、、アクション引数のRequestインスタンスを経由する方法がある。

session()グローバルヘルパーを利用する方法:

session()->各メソッド;

Requestインスタンスを経由する方法:

$request->session()->各メソッド;

セッションデータの取得・初期化

変数 = session()->get('キー', 初期値);
変数 = $request->session()->('キー', 初期値);
変数 = $request->session()->('キー', function() { return 初期値 });

  • キーに対応するセッションデータの値を変数に代入する
  • キーが存在しない時は、キー初期値をセットしてセッションデータを追加し、その値を変数に代入する

セッションデータの保存

session()->put('キー', 値);
session(['キー' => 値]);
$request->session()->put('キー', 値);

  • キーをセッションデータとして保存する

セッションデータの削除

session()->forget('キー');
$request->session()->forget('キー');

  • キーに対応するセッションデータを削除する

session()->flush();
$request->session()->flush();

  • セッションのすべてのデータを削除する

実装例

ビュー

以下の内容を含むビューを所定の位置に準備。

  • $countが1なら初訪問の旨を、そうでなければ訪問回数を表示
  • カウンターをクリアするためのボタンを表示

設定・変更アクション

コントローラーに以下のアクションを準備し、ルーティング設定する。

  • 'count'キーのセッションデータの値を取得して$countに代入
    • countというキーのセッションデータがなければ値0で作成して、その値を$countに代入
  • $countの値をインクリメント
  • $countの値を渡してビューをレンダリング

削除アクション

forget('キー')
キーに対応するセッションデータを削除する。
flush()
全てのセッションデータを削除する。

フォームのカウンタークリアボタンが押されたときのアクションを準備し、ルーティングを設定する。

  • 'count'キーのセッションデータを削除する
  • 削除した旨を画面に直接表示する

実行結果

  • 最初にアクセスすると、「初めまして」と表示
  • リロードすると「2回目のアクセスです」と表示
  • その後リロードするたびに回数が1つずつ増加
  • カウンタークリアボタンを押すと、「セッションデータを削除しました」と表示
  • ブラウザーの戻るボタンを押すと元の画面に戻り、「初めまして」と表示

 

Laravel – Cookie

Cookieの操作

Cookieの取得・初期化

変数 = \Cookie::get('Cookie名', 初期値);

  • Cookie名のCookieの値を変数に代入する
  • Cookie名のCookieが存在しない時は、初期値をセットしてその値を変数に代入する

Cookieの保存

\Cookie::queue('Cookie名', 変数, 保存期限);

  • Cookie名のCookieに変数の値を保存する
  • 保存期限は分単位で設定する

Cookieの削除

\Cookie::queue(\Cookie::forget('Cookie名'));

  • Cookie名のCookieを削除する

実装例

ビュー

以下の内容を含むビューを所定の位置に準備。

  • $countが1なら初訪問の旨を、そうでなければ訪問回数を表示
  • カウンターをクリアするためのボタンを表示

設定・変更アクション

コントローラーに以下のアクションを準備し、ルーティング設定する。

  • countという名前のCookieの値を取得して$countに代入
    • countという名前のCookieがなければ値0で作成して、その値を$countに代入
  • $countの値をインクリメント
  • $countの値を90日期限でCookieに保存
  • $countの値を渡してビューをレンダリング

削除アクション

フォームのカウンタークリアボタンが押されたときのアクションを準備し、ルーティングを設定する。

  • Cookieを削除する
  • 削除した旨を画面に直接表示する

実行結果

  • 最初にアクセスすると、「初めまして」と表示
  • リロードすると「2回目のアクセスです」と表示
  • その後リロードするたびに回数が1つずつ増加
  • カウンタークリアボタンを押すと、「cookieを削除しました」と表示
  • ブラウザーの戻るボタンを押すと元の画面に戻り、「初めまして」と表示

 

Laravel – 複数のsubmitボタン

概要

Laravelで1つのフォームに複数のsubmitボタンを配置して、押されたボタンによって処理を分ける方法。

  • ボタンにname属性を加える
  • アクションのRequest引数のhasメソッドで、引数にname属性の値を指定して、それらに応じた処理を記述する

以下のフォームを含むビューを準備する。

コントローラーに以下のアクションを準備し、フォームからのPOSTに対してルーティング設定する。

ボタン1/ボタン2を押すと、それぞれのname属性の値に応じたメッセージが表示される。

 

Laravel – バリデーション – validate()

概要

Laravelにおけるフォーム入力のバリデーションのうち、validate()メソッドによる手順を整理する。

検証ルールの詳細については別途整理している。

コード例

ビュー

以下のビューで入力と入力結果の表示を兼用。

コントローラー

GETに対するアクションは、単にビューを表示するだけ。

フォームからのPOSTに対するアクションは、ユーザー名、ハンドルネーム、メールアドレスの3つの入力を受け取り、下部にそれを表示する。タイトル表示で入力結果を表示していることが判別できる。

条件の設定

基本形

検証条件設定の基本形は以下のとおり。検証条件の詳細はこちらを参照。

  • アクションの引数のRequestインスタンスのvalidate()メソッドで設定
  • 条件は連想配列でvalidate()の引数に渡す
  • 連想配列のキー文字列がフォームの各アイテムのname属性値
  • キーに対応する値が各アイテムに対する条件で、文字列で設定

$request->validate(['name属性' => '検証条件']);

複数条件

1つのアイテムに複数の条件があるときの設定方法には2つある。

配列にする方法

検証条件の文字列を要素とする配列を値とする。

$request->validate(['name属性' => ['検証条件1', '検証条件2', ...]]);

文字列内で'|'でつなぐ方法

検証条件をOR演算子と同じ'|'でつないだ文字列を値として渡す。

$request->validate(['name属性' => '検証条件1|検証条件2|...']);

検証結果に応じた処理

処理の流れ

検証結果が妥当な場合は、そのまま以降の処理が実行される。検証結果の1つ以上が妥当でなければ、validate()メソッドより後は実行されず、元の画面がレンダリングされる。

先のコードで、すべての条件が妥当なら、タイトルが「バリデーションサンプル結果」となり入力内容が表示される。一方、条件の何れか1つでも妥当でなければ、タイトルは「バリデーションサンプル入力」となり入力内容は表示されない。

$errors

バリデーションの結果が妥当でない場合、グローバル変数$errorsにメッセージが保存される。$errorsViewErrorBagクラスのオブジェクトで、以下の様にすることで各エラーメッセージを順次取り出すことができる(エラーがない場合は処理されない)。

foreach ($errors->all() as $error)

以下は$errorsの内容をビューに表示させる例。コントローラーで特に定義等の必要はなく、検証結果に応じてセットされる。

たとえばユーザーネームを空にし、ハンドルネームに11文字、メールアドレスに@マークなしの文字列を入れた場合の$errorsの表示例は以下のとおり。

The name field is required.

The handlename may not be greater than 10 characters.

The email format is invalid.

フォームリクエスト

ここではコントローラーにバリデーション処理を記述したが、フォームリクエストを利用することによってこれを分離できる。

また、フォームリクエストのメソッドをオーバーライドして、エラーメッセージをカスタマイズすることもできる。

参考:Laravel 6.x バリデーション~エラーメッセージのカスタマイズ

 

Laravel – validation – 検証ルール

概要

主なバリデーションルールを整理する。網羅的な内容はドキュメントを参照。

存在・唯一性

required

パラメーターが入力されているか。

required

unique

データベースの指定フィールド内で唯一か。

unique

サイズ

size/min/max/between

フィールドの種類に応じて、特定値、最小値・最大値、値の範囲を検証。

size:サイズ
min:最小サイズ
max:最大サイズ
between:最小サイズ,最大サイズ

サイズはフィールドの種類によって解釈。

  • 文字列の場合は文字数
  • 数値の場合は整数値
  • ファイルの場合はキロバイト単位のファイルサイズ

正規表現

regex

入力が正規表現パターンに一致するかどうか。

regex:/正規表現/

数値形式

integer/numeric

入力が整数か/数値か

digits/digits_between

桁数が合致しているか/範囲内か。

digits:桁数
digits_between:最小桁数,最大桁数

文字列形式

string

入力が文字列かどうか。

string

email/url/active_url/ip

e-mailアドレス形式、URL形式か/有効なURLか、IPアドレス形式か。

email
url
active_url
ip

json

JSON文字列か。

json

timezone

タイムゾーンの文字列か。

timezone

日付

date

日付かどうか。日付の存在チェックも行う。たとえば2020/2/29は妥当だが、2021/2/29はエラーとなる。

date

date_format

指定した日付・時刻フォーマットか(YYYY/MM/ddH:iなど)。

date:日付・時刻フォーマット

before/after

指定した日付より前か/後か。現在を基準にする場合はnow

before:now
after:2020-3-31

before_or_equal/after_or_equal

指定した日付以前か/以後か。

before_or_equal:now
after_or_equal:2020-3-31

ファイル確認

file/image

ファイルかどうか。

file

画像ファイル(jpg,png,bmp,gif,svg)かどうか。

image

mimes

指定した拡張子か。

mimes:拡張子,拡張子,...

dimensions

画像パラメーターが指定した値か。

dimensions:属性=値,属性=値,...

属性の種類はmin_widthmax_widthmin_heightwidthheightratio

 

PHP – テキスト – 読み込み – SplFileObject

概要

Standard PHP LibraryのSplFileObjectを使ったテキストファイルの読み込みについて整理する。

  • ファイル名を指定してSplFileObjectのインスタンスを生成
    • $file = new \SplFileObject('textファイルパス');
    • $open_modeはデフォルト値の'r'(読み込み)
  • テキスト読み込みのためのフラグをセット
    • $file.setFlags(...);
  • ファイルを読み込み
    • foreachで行単位データを取得

なお、Splは”Standard PHP Library”の略。

基本例

例として、GETリクエストに応じて所定の場所に配置されたテキストファイルを読みだし、その内容を行データを要素とする配列に格納し、dd()で表示させてみる。

CSVファイルの配置

storage/app/ディレクトリーにテキストファイルを配置した場合は、storage_path()関数にstorageディレクトリーを基準としたパスを指定してフルパスを得ることができる。

たとえば以下の内容のファイルをstorage/app/text_sample_utf8.csvとして配置する(エンコーディングはUTF-8)。

コントローラー

テキストファイルを読み込み、その内容を配列に保存してdd()で表示するアクションは以下のとおり。

dd()の表示結果は以下の通り。

フラグ

空行を読み飛ばしたい場合は、READ_AHEADSKIP_EMPTYDROP_NEW_LINEの3つを設定する。空行を空の文字列として確保したい場合は最後の空行の要不要をによって、不要ならデータを削除する。

詳細はこちらを参照。

 

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ファイルに追加されたデータが反映されている。

PHP – CSV – 読み込み – SplFileObject

概要

SplFileObjectによるCSVファイルの読み込みについて整理する。手順概略は以下のとおり。

  • ファイル名を指定してSplFileObjectのインスタンスを生成
    • $file = new \SplFileObject('csvファイルパス');
    • $open_modeはデフォルト値の'r'(読み込み)
  • CSV読み込みのためのフラグをセット
    • $file.setFlags(...);
  • ファイルを読み込み
    • foreachで行単位データを取得
    • 行データは各フィールド値を要素とする配列

なお、Splは”Standard PHP Library”の略。

基本例~一括読み込み

例として、GETリクエストに応じて所定の場所に配置されたCSVファイルを読みだし、行データを要素とする配列に格納し、その内容をブラウザーに表示するアプリケーションを考える。

CSVファイルの配置

storage/app/ディレクトリーにCSVファイルを配置した場合は、storage_path()関数にstorageディレクトリーを基準としたパスを指定してフルパスを得ることができる。

たとえば以下の内容のファイルをstorage/app/csv_sample_utf8.csvとして配置する(エンコーディングはUTF-8)。3つのカラムがカンマ','で区切られている。

ルーティング

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

コントローラー~処理本体

コード

コントローラーのアクションは以下のとおり。

SplFileObjectインスタンスの生成

PHPのSplFileObjectのインスタンスを、CSVファイルのパスを指定して生成する。

  • LaravelでPHPのクラスを使う場合は、クラス名の冒頭に'\'を記述
  • storage_path()関数によりアプリケーションのstorageディレクトリーを基準にしたCSVファイルのパスを指定

フラグの設定

SplFileObjectクラスのsetFlags()メソッドで、必要なフラグを'|'(or)で連ねて設定する。CSV読み込み時のフラグの影響についてはこちらを参照。

ファイルの読み込み

ファイルの各行をforeachで取り出し、配列に格納していく。

各行はREAD_CSVフラグによりCSVとみなされ、3つのフィールドが分解されて要素数3の配列になる。この結果、$linesには6行分のCSVから読み込んだ配列が格納され、各配列は3つのフィールドに対応する要素を持つ。

ファイルクローズ

ファイルクローズのコマンドはないが、インスタンスの参照変数にnullを代入してインスタンスを破棄している。

PHPマニュアル(SplFileObject)のUser Contributed Notes (64)でSplFileObjectのインスタンスにnullをセットする意義が示されている。

ビューへの引継ぎ

タイトルとCSVから読み込んだ配列をビューに渡している。

ビューにおける表示

ビューでは、コントローラーから受け取った変数をHTMLとして展開している。

以下はブラウザーでの表示例。

ファイルの順次読込

CSVファイルのサイズがかなり大きい可能性がある場合、一括して配列に読み込むとサーバーのメモリーを過大に圧迫することが考えられる。

CSVの内容をデータベースに登録するような処理の場合、1行ずつ読み込んで処理し、サーバーの負荷を軽減することを検討すべき。

エンコーディング

読み込むCSVファイルのエンコーディングがUTF-8以外の場合、そのまま読み込んだだけでは適正に扱えない。このようなことは表計算ソフトで作成したファイルがShift-JISというのはよくある。

SplFileObjectでCSVファイルを読み込む場合、1行のデータが各フィールドに対応した要素を持つ配列となるので、mb_covert_variablesを使う。