Vlastní blog v Laravel: Smazání článku
Aktualizováno pro Laravel 10
V tomto díle se zaměříme na tu nejjednodušší část, tedy smazání stávajícího článku. Jako první si upravíme PostController
a vytvoříme si metodu pro smazání článku.
Metoda pro smazání
V Http/Controllers/PostController.php
si upravíme metodu destroy()
:
public function destroy(Post $post)
{
$post->delete();
return redirect()->route('posts.index')->with('success', 'Článek byl úspěšně smazán.');
}
Zde je použit tzv. explicit binding pro model Post
, stejně jako v předchozím příkladu s editací. Tento přístup nám umožňuje automaticky načíst celý model, a tedy snadno manipulovat s daty.
Tlačítko pro smazání
Následně je třeba přidat tlačítko pro smazání článku do našeho seznamu článků. V resources/views/posts/index.blade.php
si přidáme tlačítko na smazání daného článku:
...
<tbody class="bg-white">
@foreach ($posts as $post)
<tr>
<td class="border-b border-slate-100 dark:border-slate-700 p-4 pl-8 text-slate-500 dark:text-slate-400">{{ $post->title }}</td>
<td class="border-b border-slate-100 dark:border-slate-700 p-4 pl-8 text-slate-500 dark:text-slate-400">{{ $post->created_at }}</td>
<td class="border-b border-slate-100 dark:border-slate-700 p-4 pl-8 text-slate-500 dark:text-slate-400">{{ $post->updated_at }}</td>
<td class="border-b border-slate-100 dark:border-slate-700 p-4 pl-8 text-slate-500 dark:text-slate-400">
<a href="{{ route('posts.edit', $post->id) }}" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">Editovat</a>
<form action="{{ route('posts.destroy', $post->id) }}" method="POST" class="inline">
@csrf
@method('DELETE')
<button type="submit" class="bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded">Smazat</button>
</form>
</td>
</tr>
@endforeach
</tbody>
...
Ve výše uvedeném příkladě jsme přidali nový formulář pro smazání článku vedle odkazu na editaci. Tento formulář je propojen s trasou posts.destroy
, která je následně zpracována v naší nové metodě destroy()
v PostController.php
. Při stisknutí tlačítka "Smazat" se tedy provede HTTP požadavek s metodou DELETE
, který smaže příslušný článek.
Není vám něco jasné, nefunguje nebo mám někde chybu? Napište do komentářů!
Zdrojové kódy pro tento díl naleznete na GitHubu
Seriál