2015-08-12 5 views
0

Я создаю следующий репозиторий для загрузки файлов. Мне нужно проверить размер файла, и если проверка не удалась, перенаправите обратно в форму с ошибками. Но когда checkSize не удастся, перенаправление не произойдет. В чем проблема?Laravel 5.1 redirect() -> back() не работает

<?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; 
     } 
    } 
} 
+1

Вопрос может быть: (1) Вызывается 'upload()'? и (2) Выполняется ли цикл foreach или условие if() '? Кажется, что нет никакого резерва, если есть пустой массив файлов или пустой файл ... –

+1

Вы не должны перенаправлять кого-либо в любом месте. Это зависит только от вашего контроллера. –

+0

Какая ошибка, что его возвращение? –

ответ

2

Вы должны возвратить ответ в вашей 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; 
    } 
} 
+0

Ваше решение не работает. –

+0

Ваш маршрут называется UploadFileRepository @ upload? Если это не так, то добавьте 'return upload ($ files);' в функцию, которую вы вызываете. –

+0

Нет, я вызываю метод загрузки в своем контроллере –

1

Вы можете попробовать: вернуться() -> с ('ошибка', 'Сообщение об ошибке');

Смежные вопросы