Я строю CRUD с Laravel. Каждая категория имеет много вложений, и каждое вложение относится к категории.
В представлении category.edit я хочу дать пользователю возможность удалять вложения (по отдельности) из категории. Я попробовал этот метод, но он не работал:
Регистрация маршрута для вложения:
Route::group(['middleware' => ['auth']], function () {
Route::delete('attachment/{id}', 'AttachmentController@delete')->name('attachment');
});
Обработка удаления при помощи метода AttachmentController @ delete:
class AttachmentController extends Controller
{
public function delete($id) {
$toDelete = Attachment::findOrFail($id);
$toDelete->delete();
return redirect()->back();
}
}
В CategoryController (метод правки) я выбираю вложения, связанные с каждой категорией, которая будет отображаться внутри представления:
public function edit($category)
{
$wildcard = $category;
$category = Category::findOrFail($wildcard);
$attachments = App\Category::findOrFail($wildcard)->attachments()->get()->toArray();
return view('category.edit', [
'category' => $category,
'attachments' => $attachments
]);
}
В представлении я отображаю вложение и кнопку для удаления. Я полностью осознаю ошибку, связанную с наличием формы внутри другой формы, тем не менее я не знаю другого подхода к отправке этого запроса на удаление.
// update Category form
@foreach ($attachments as $attachment)
<div class="row">
<div class="col-4">
<img style="width: 100%;" src={{ $attachment['url'] }} alt="">
</div>
<div class="col-4">
<div>
<p class="general_par general_url">{{ $attachment['url'] }}</p>
</div>
</div>
<div class="col-4">
<form action="{{ route('attachment', $attachment['id']) }}" method="POST">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">Delete Image</button>
</form>
</div>
</div>
<hr>
@endforeach
// end of update Category form
Должен ли я создать метод deleteAttachment внутри CategoryController? Если да, как я могу отправить запрос на удаление? Кроме того, если какая-либо другая Модель в будущем будет иметь вложения, должен ли я создать метод deleteAttachment внутри каждого контроллера? Это громоздко. Заранее спасибо