Laravel – アップロード画像の入力

概要

画像ファイルを含むフォームの作り方、画像ファイルに対するバリデーションについて整理する。

  1. アップロード画像処理~準備
  2. 画像ファイルの入力
  3. アップロード画像ファイルの保存・登録
  4. アップロード画像の表示
  5. アップロード画像の変更・削除

アップロード画像処理~準備で枠組みを作った商品データのアプリケーションを加工していく。

一般的なアップロードファイルの入力・取得についてはこちらを参照。

入力・登録後のアップロード画像の登録・保存についてはこちらを参照。

ルーティング

通常のリソースベースでは、新規データの入力はcreateルートが想定されているが、ここではindexページに商品入力フォームを配置し、そこで商品データの内容や商品画像を入力する。

商品入力ページ~index.blade.php

indexページに商品入力フォームを配置し、そこに商品画像ファイルの選択要素を含める。画像選択を含むフォームに関する要点は以下のとおり。

  • form要素に以下のオプションを加える
    • enctype="multipart/form-data"
  • input要素でtype="file"を指定する

なおリソースベースによるデータ登録の場合、createアクションでルーティングされるページに入力フォームを置くことが想定されているが、ここでは商品一覧を表示するindexページで商品入力も行い、その入力フォームからstoreアクションを呼び出す。

フォームリクエスト

フォームリクエストでバリデーションを行う。フォームリクエストItemRequestは以下のコマンドで作成。

生成されたフォームリクエストの雛形で、以下を編集。

  • authorize()の戻り値をtrueに変更
  • rules()の戻り値の配列にバリデーションルールを記述

コントローラー~index/store

コントローラーでは2つのアクションメソッドを定義している。

  • indexアクションではindexページを表示するのみ
  • storeアクションでは、フォームデータに基づいてItemインスタンスをデータベースに登録

ここでの留意点は以下のとおり。

  • 作成したフォームリクエストItemRequestuseでインポートし、メソッドインジェクションをRequestからItemRequestに変更している
  • create()メソッドがマスアサインメントのため、Itemモデルで$fillableの定義が必要

Itemモデルでの$fillable定義は以下の部分を追記。

データ登録確認

この状況でアプリケーションを実行し、フォームでデータを登録したのが以下の例。

画像ファイルのパスは、まだ未登録の状態。

コメントを残す

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