首页 > 解决方案 > 根据 SOLID 原则,文件上传过程在 Laravel 上应该如何进行?

问题描述

让我们在 Laravel 上进行文件上传。但是根据 SOLID 原则,我们应该在哪里执行此操作?控制器?还是仓库?哪里?

class UploadController extends Controller
{
    public function upload(Request $request){


        $files = $request->file('attachment');
    
        if($request->hasFile('attachment'))
        {
            foreach ($files as $file) {
                $file->store('users/' . $this->user->id . '/messages');
            }

            return redirect()->route('fileupload.form')
            ->with('status', true)
            ->with('msg', __('File upload successful'));
        }
    }

}

或者?

标签: phplaravel

解决方案


我宁愿创建一个上传文件的服务。如下所示:

namespace App\Service;

use Illuminate\Http\UploadedFile;
use Symfony\Component\HttpFoundation\File\Exception\UploadException;

class Upload
{

    /**
     * Store media and return path
     *
     * @param UploadedFile|UploadedFile[]|null $uploadedFile
     * @param $store_path
     * @param bool $get_path_only
     * @return array|string|null
     */
    public function store($uploadedFile, $store_path, $get_path_only = true)
    {
        if ($uploadedFile->isValid()) {
            $path          = $uploadedFile->store($store_path, 'public');
            $original_name = $uploadedFile->getClientOriginalName();

            if ($get_path_only) return $path;

            return [$path, $original_name];

        } else {
            throw new UploadException("Uploaded file is not valid.");
        }
    }
}

推荐阅读