我在 Laravel 应用程序中使用Spatie MediaLibrary库。我想通过 REST API 将 0 张或多张照片上传到我的应用程序。
photo当属性包含 1 个文件时我可以让它工作
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'slug' => 'required',
'description' => 'required',
'price' => 'required|integer',
'photo' => 'nullable|file'
]);
$listing = Listing::Create([
'user_id' => auth('api')->user()->id,
'name' => $request->name,
'slug' => $request->slug,
'description' => $request->description,
'price' => $request->price,
]);
// stores the photo
if ($request->hasFile('photo')) {
$listing->addMediaFromRequest('photo')->toMediaCollection('photos');
}
return new ListingResource($listing);
}
Run Code Online (Sandbox Code Playgroud)
我知道想要更改代码,以便它可以处理请求中的多张照片。我在上面的控制器中使用以下代码来执行此操作:
if ($request->hasFile('photo')) {
foreach ($request->input('photo', []) as $photo) {
$listing->addMediaFromRequest('photo')->toMediaCollection('photos');
}
}
Run Code Online (Sandbox Code Playgroud)
我已将属性更改为photos[]而不是photo.
该代码甚至从未进入 foreach 循环。
有人知道如何解决这个问题吗?
显然 Spatie Medialibrary 有一个名为 的函数addMultipleMediaFromRequest。完整的代码现在是
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'slug' => 'required',
'description' => 'required',
'price' => 'required|integer',
'photo' => 'nullable'
]);
$listing = Listing::Create([
'user_id' => auth('api')->user()->id,
'name' => $request->name,
'slug' => $request->slug,
'description' => $request->description,
'price' => $request->price,
]);
if ($request->hasFile('photo')) {
$fileAdders = $listing->addMultipleMediaFromRequest(['photo'])
->each(function ($fileAdder) {
$fileAdder->toMediaCollection('photos');
});
}
return new ListingResource($listing);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9316 次 |
| 最近记录: |