https://prnt.sc/pnqxHr_bk3HO
böyle bir hata alıyorum fakat neden aldığıma dair hiç bir fikrim yok çalışması gerekirdi halbuki. optimize:clear
da yaptım. _method
şeklinde PUT
da yolluyorum ama çalışmıyor.
ProductModal.vue
function onSubmit() {
loading.value = true;
if(product.value.id) {
store.dispatch('updateProduct', product.value)
.then(response => {
loading.value = false;
if(response.status === 200) {
store.dispatch('getProducts');
closeModal();
}
})
}else {
store.dispatch('createProduct', product.value)
.then(response => {
loading.value = false;
if(response.status === 201) {
store.dispatch('getProducts');
closeModal();
}
})
.catch(err => {
loading.value = false;
debugger;
})
}
}
actions.vue
export function updateProduct({ commit }, product) {
const id = product.id;
if(product.image instanceof File) {
const form = new FormData();
form.append('id', product.id);
form.append('title', product.title);
form.append('image', product.image);
form.append('description', product.description);
form.append('price', product.price);
form.append('_method', 'PUT');
product = form;
}
return axiosClient.post(`/products/${id}`, product);
}
ProductController
public function update(ProductRequest $request, Product $product)
{
$data = $request->validated();
$data['updated_by'] = $request->user()->id;
$image = $data['image'] ?? null;
if($image) {
$relativePath = $this->saveImage($image);
$data['image'] = URL::to(Storage::url($relativePath));
$data['image_mime'] = $image->getClientMimeType();
$data['image_size'] = $image->getSize();
if($product->image) {
Storage::deleteDirectory('/public/' . dirname($product->image));
}
}
$product->update($data);
return new ProductResource($product);
}
ProductRequest
public function rules(): array
{
return [
'title' => ['required', 'max:200'],
'image' => ['nullable', 'image'],
'description' => ['nullable', 'string'],
'price' => ['required', 'numeric'],
];
}
api.php
Route::apiResource('products', ProductController::class);
Bu arada böyle bir özellik gelmiş (ben yeni gördüm).
https://prnt.sc/IY4KmbY7FJ9J
ve açıklama yapıyor
https://prnt.sc/OI3orRbUn8kz