【问题标题】:Laravel - displaying errors goes wrongLaravel - 显示错误出错
【发布时间】:2016-12-08 18:22:31
【问题描述】:

我有一个带有文件上传表单的简单页面。 如果出现问题,我正在控制器中验证它并在视图中返回错误。不幸的是,有错误的警报总是显示(没有错误时为空警报),即使我没有提交表单。有人可以告诉我如何以更好的方式做到这一点吗?

表单+错误显示:

<form enctype="multipart/form-data" method='POST' action='/add_image'>
    {{ csrf_field() }}
    <p>Wybierz zdjęcie do dodania:</p>
    <input type="file" onchange='loadFile(event)' name='fileUpload' id='fileUploadInput'> <br> <br>
    <img id="uploadPreview"> <br> <br>
    <input type='submit' name='submit' id='fileUploadSubmit'>
</form>


    @if($errors)

       <script>alert('{{$errors->first()}}');</script>

    @endif

验证:

 if($request->hasFile('fileUpload')){
            $image = $request->file('fileUpload');

            $validator = Validator::make($request->all(), [
               'fileUpload' => 'required|image',
            ])->validate();

        }

$errors var_dump 输出无错误:

object(Illuminate\Support\ViewErrorBag)#147 (1) { ["bags":protected]=> array(0) { } }

我只想在出现任何错误时显示此警报...

我还尝试了 if(isset($errors)) 和 !empty 但它没有帮助

【问题讨论】:

    标签: php laravel validation laravel-5 laravel-5.3


    【解决方案1】:

    您正在检查的$errors 对象不会评估为FALSE,而是TRUE 因为它是一个对象(ViewErrorBag)。这使得if 检查通过,但仍然在first() 调用中爆炸。
    您需要做的是确保错误包中有任何错误。
    请尝试以下操作:

    @if($errors->any())
      <script>alert('{{$errors->first()}}');</script>
    @endif
    

    【讨论】:

    • 这是正确的,但我认为$errors-&gt;any() 会更好,因为这是any() 的目的
    • @mopo922 是的,你可能是对的。在舌头上滚动也更好!生病改变它;)
    • 我在哪里可以在文档中找到有关 any() 的信息?我找不到它
    • 我不知道我在哪里学到的TBH。你是对的,它不在文档中。如果你打开vendor/laravel/framework/src/Illuminate/Support/MessageBag.php中的源代码你可以看到$errors上有哪些方法可以使用
    • 来自 laravel API 文档:laravel.com/api/5.3/Illuminate/Support/…
    猜你喜欢
    • 2020-12-04
    • 2018-12-05
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2015-10-12
    • 2013-11-24
    • 2016-10-23
    相关资源
    最近更新 更多