Я создаю следующий репозиторий для загрузки файлов. Мне нужно проверить размер файла и, если проверка не пройдена, перенаправить обратно на форму с ошибками. Но когда 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;
}
}
}
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;
}
}
return upload($files);
в функцию, которую вызывает ваш маршрут.
redirect()->back()
, если в upload() есть ошибка.
Вы можете попробовать: return back()->with('error','Сообщение об ошибке');
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
upload()
? и (2) Выполняется ли циклforeach
или условиеif()
? Кажется, нет никакого резерва, если есть пустой файловый массив или пустой файл...checkSize
с вашего контроллера и вернуть логическое значение. 2) выдать ошибку, поймать ее в своем контроллере и перенаправить.back()
, который вы можете использовать напрямую. Нет необходимости вredirect()->back()
.