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

  1. 1. Úvod a instalace
  2. 2. Příprava databáze
  3. 3. Layout a zobrazení článků
  4. 4. Vytvoření článku
  5. 5. Editace článku
  6. 6. Smazání článku
  7. 7. Zobrazení článku