-- 수정
데이터 수정 VIEW 페이지
<form method="POST" action="{{ route('admin.menus.update', $menu->id) }}" enctype="multipart/form-data">
@csrf
@method('PUT')
<div class="sm:col-span-6">
<label for="name" class="block text-sm font-medium text-gray-700"> Name </label>
<div class="mt-1">
<input type="text" id="name" name="name" value="{{ $menu->name }}"
class="block w-full transition duration-150 ease-in-out appearance-none bg-white border border-gray-400 rounded-md py-2 px-3 text-base leading-normal transition duration-150 ease-in-out sm:text-sm sm:leading-5" />
</div>
</div>
<div class="sm:col-span-6">
<label for="title" class="block text-sm font-medium text-gray-700"> Image </label>
<div>
<img src="{{ Storage::url($menu->image) }}" alt="" class="w-32 h-32">
</div>
<div class="mt-1">
<input type="file" id="image" name="image"
class="block w-full transition duration-150 ease-in-out appearance-none bg-white border border-gray-400 rounded-md py-2 px-3 text-base leading-normal transition duration-150 ease-in-out sm:text-sm sm:leading-5" />
</div>
</div>
<div class="sm:col-span-6">
<label for="price" class="block text-sm font-medium text-gray-700"> Price </label>
<div class="mt-1">
<input type="number" id="price" name="price" value="{{ $menu->price }}"
min="0.00" max="10000.00" step="0.01"
class="block w-full transition duration-150 ease-in-out appearance-none bg-white border border-gray-400 rounded-md py-2 px-3 text-base leading-normal transition duration-150 ease-in-out sm:text-sm sm:leading-5" />
</div>
</div>
<div class="sm:col-span-6 pt-5">
<label for="description" class="block text-sm font-medium text-gray-700">Description</label>
<div class="mt-1">
<textarea id="description" rows="3" name="description" class="shadow-sm focus:ring-indigo-500 appearance-none bg-white border border-gray-400 rounded-md py-2 px-3 text-base leading-normal transition duration-150 ease-in-out focus:border-indigo-500 block w-full sm:text-sm border-gray-300 rounded-md">
{{ $menu->description }}
</textarea>
</div>
</div>
<div class="sm:col-span-6 pt-5">
<label for="categories" class="block text-sm font-medium text-gray-700">Categories</label>
<div class="mt-1">
<select id="categories" name="categories[]" multiple class="form-multiselect block w-full mt-1">
@foreach ($categories as $category)
<option value="{{ $category->id }}" @selected($menu->categories->contains($category))>{{ $category->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="mt-6 p-4">
<button type="submit" class="px-4 py-2 bg-indigo-500 hover:bg-indigo-700 rounded-lg text-white">Update</button>
</div>
</form>
컨트롤러에서 수정된 부분 처리
public function update(Request $request, Menu $menu)
{
$request->validate([
'name' => 'required',
'description' => 'required',
'price' => 'required',
]);
$image = $menu->image;
if ($request->hasFile('image')) {
Storage::delete($menu->image);
$image = $request->file('image')->store('public/menus');
}
$menu->update([
'name' => $request->name,
'description' => $request->description,
'image' => $image,
'price' => $request->price,
]);
if ($request->has('categories')) {
$menu->categories()->sync($request->categories);
}
return to_route('admin.menus.index');
}
Create에서 $menu->categories()->attach($request->categories); 이랬던 부분이 Update 에서는 $menu->categories()->sync($request->categories); 이렇게 변경 되었다.
카테고리와 메뉴 연결을 설정하는 migration 부분 역시 아래와 같이 변경
사실 안 해도 되긴 하는데 오류가 날 경우 이렇게 바꿔 주고 migration:refresh --seed 명령 한번 날려주자.
-- 삭제
삭제 VIEW 페이지
<form
class="px-4 py-2 bg-red-500 hover:bg-red-700 rounded-lg text-white"
action="{{ route('admin.menus.destroy', $menu->id) }}"
method="POST"
onsubmit="return confirm('Are you sure?');">
@csrf
@method('DELETE')
<button type="submit">Delete</button>
</form>
삭제 부분 처리하는 컨트롤러
public function destroy(Menu $menu)
{
$menu->delete();
Storage::delete($menu->image);
return to_route('admin.menus.index');
}