Charry
@Charry

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Laravel 画像アップロード時のコードの記述について バリデーションのfileとisValidの違い

制作環境

Windows 10
Laravel : 6.18.35
Laravel/ui : 1.0
Laravel-mix : 5.0.1
Bootstrap : 4.0.0
MDBootstrap : 4.19.1
chart.js : 2.9.3
XAMPP
PHP : 7.4.3
Visual Studio Code

はじめに

プログラミング学習をはじめたばかりの素人で、今独学でLaravelの勉強をしていて、画像のアップロードについて色々見ているのですが、その中の記述で気になった記述があったので質問させてください。

気になっている記述

とある方の記述で、下記のようなコントローラへの記述がありました(一部抜粋)。

public function upload(Request $request)
    {
        $this->validate($request, [
            'file' => [
                // 必須
                'required',
                // アップロードされたファイルであること
                'file',
                // 画像ファイルであること
                'image',
                // MIMEタイプを指定
                'mimes:jpeg,png',
            ]
        ]);

        if ($request->file('file')->isValid([])) {
            $path = $request->file->store('public');

            $file_name = basename($path);
            $user_id = Auth::id();
            $new_image_data = new Image();
            $new_image_data->user_id = $user_id;
            $new_image_data->file_name = $file_name;

            $new_image_data->save();

            return redirect('/output');
        } else {

気になっている箇所は(一部省略)、

public function upload(Request $request)
    {
        $this->validate($request, [
            'file' => [
                // アップロードされたファイルであること
                'file',
            ]
        ]);

上記と、

if ($request->file('file')->isValid([])) {

の部分です。

質問内容

バリデーションでのfileと、isValidは両方とも記述した方がいいのでしょうか?
同じ事をしているような気がするのですが、違うのでしょうか?

リファレンスを確認したところ
バリデーションルールfileは、
「フィールドがアップロードに成功したファイルであることをバリデートします。」

isValidは、
「ファイルが存在しているかに付け加え、isValidメソッドで問題なくアップロードできたのかを確認できます。」
と記載がありました。

素人の考えで大変恐縮なのですが、バリデーションでフィールドがアップロードに成功したことの確認が取れたということは、(アップロードされているから)ファイルが存在している。

アップロードに成功しているので、問題なくアップロードができていると感じるのですが・・・。

フィールドがアップロードに成功しても、ファイルが存在しないことがあったりするのでしょうか?
同じような内容に見えて、やはり違ったことやっているので、片方だけの記述ではなく、両方記述する方がいいのでしょうか?

ご教授いただけたら、幸いです。
よろしくお願いいたします。

0

2Answer

この場合の「ファイルが存在しているか」というのはアップロードの成否とは違います。
ファイルのアップロードが必須(required)ではないケースを考えるのが良いと思います。
その時に「ファイルがアップロードされたか」というイメージです。

isValidについては詳しく確認できてないので回答は控えます。

0Like

Comments

  1. @Charry

    Questioner

    blue32a 様

    ご回答ありがとうございました。
    その後簡単なプログラムを作成し、色々検証して答えがでました。
    blue32a 様がおっしゃっていることが、一番本質的な考え方のようです。

    リファレンスの翻訳が読み方によっては、誤解を招くことがわかりました。
    検証結果を記事にまとめてみたいと思います。

    ありがとうございました。

blue32a 様

ご回答ありがとうございます。
一度簡単なサンプルを作成し、色々試してみようと思います。

0Like

Your answer might help someone💌