php - 根据 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'));
}
}
}
或者?
解决方案
我宁愿创建一个上传文件的服务。如下所示:
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.");
}
}
}
推荐阅读
- java - 如何删除 TextChangedListener?
- c# - C# HttpClient 自定义标头每个请求
- excel - 通过单击按钮根据计数增加值
- ios - 未调用 iOS 委托方法
- google-cloud-platform - Google BigQuery 的 HLL+ 精度
- javascript - 仅在 Travis CI 上使用扩展运算符构建失败
- php - Laravel 5.8 Show 方法的自定义路由
- php - php SoapClient wsdl SoapFault 异常:[HTTP] 无法连接到主机
- php - 将 PHP 脚本和 html 呈现在一个函数/视图中
- python - 'keras_retinanet' 不是内部或外部命令、可运行程序或批处理文件