簡體   English   中英

Laravel 5.1 redirect()-> back()不起作用

[英]Laravel 5.1 redirect()->back() not working

我正在構建以下用於文件上傳的存儲庫。 我需要檢查文件大小,如果驗證失敗,請重定向回帶有錯誤的表單。 但是當checkSize失敗時,將不會發生重定向。 問題是什么?

<?php
namespace app\Repositories;

class UploadFileRepository
{
    public $fileNames=[];
    protected $maxSize=2097152;
    public function upload($files){
        foreach ($files as $file){
            if(!empty($file)){
                $filename=$file->getClientOriginalName();
                $this->checkSize($file);
                $this->fileNames[]=$filename;
                $file->move(base_path().'/public/uploads/', $filename);
            }
        }
    }
    protected function checkSize($file){
        $fileSize=$file->getClientSize();
//        dd($fileSize);
        $filename=$file->getClientOriginalName();
        if ($fileSize == 0) {
          return  redirect()->back()->withInput()->withErrors([ $filename. ' is empty.']);
        } elseif ($fileSize > $this->maxSize) {
            return redirect()->back()->withInput()->withErrors([ $filename. ' is too large.']);
        } else {
            return true;
        }
    }
}

您需要在upload函數(或路由所調用的任何函數)中返回響應。 在您的代碼中,如果出現錯誤, checkSize將返回一個響應,但是upload不會返回它,因此它只會丟失。

您可以執行以下操作:

class UploadFileRepository
{
    public $fileNames=[];
    protected $maxSize=2097152;

    public function upload($files){
        foreach ($files as $file){
            if(!empty($file)){
                $filename=$file->getClientOriginalName();

                $error = '';
                if (!$this->checkSize($file, $error))
                    return redirect()->back()->withInput()->withErrors([ $error ]);

                $this->fileNames[]=$filename;
                $file->move(base_path().'/public/uploads/', $filename);
            }
        }
    }

    protected function checkSize($file, &$error){
        $fileSize=$file->getClientSize();
        $filename=$file->getClientOriginalName();

        if ($fileSize == 0) {
            $error = $filename . ' is empty.';
            return false;
        } elseif ($fileSize > $this->maxSize) {
            $error = $filename . ' is too large.';
            return false;
        } else
            return true;
    }
}

您可以嘗試:return back()-> with('error','Error message');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM