Controller und Routen müssen dem Browser eine Antwort liefern.
Laravel bietet einfache Wege, um Strings, Arrays, Views, Redirects, JSON und weitere Antwortformen zurückzugeben.
Mit route() verweisen Sie über den Routennamen statt einer festen URL.
Best Practice, da sich URLs so ändern können, ohne dass Code angepasst werden muss.
<?phpnamespace App\Http\Controllers;use App\Models\User;use Illuminate\Http\JsonResponse;use Illuminate\Http\Request;class UserController extends Controller{ public function index(): JsonResponse { $users = User::all(); return response()->json($users); } public function store(Request $request): JsonResponse { // Mit validierten Daten erstellen (nach Form Request oder $request->validate()) $user = User::create($request->validated()); return response()->json($user, 201); }}
Auch das einfache Rückgeben eines Arrays oder Eloquent-Modells liefert JSON. response()->json() gibt Ihnen jedoch feine Kontrolle über Status und Header.
<?phpnamespace App\Http\Controllers;use App\Models\Post;use Illuminate\Http\RedirectResponse;use Illuminate\Http\Request;use Illuminate\View\View;class PostController extends Controller{ // Übersicht: View public function index(): View { $posts = Post::latest()->get(); return view('posts.index', ['posts' => $posts]); } // Erstellungs-Formular: View public function create(): View { return view('posts.create'); } // Speichern: Redirect public function store(Request $request): RedirectResponse { // Mit validierten Daten anlegen (falls Form Request) $post = Post::create($request->validated()); return redirect() ->route('posts.show', ['post' => $post->id]) ->with('success', 'Beitrag erstellt.'); } // Detailseite: View public function show(Post $post): View { return view('posts.show', ['post' => $post]); } // Löschen: Redirect public function destroy(Post $post): RedirectResponse { $post->delete(); return redirect() ->route('posts.index') ->with('success', 'Beitrag gelöscht.'); }}
In Web-Apps ist die klare Trennung zwischen View und RedirectResponse üblich. Anzeigen liefern View, verändernde Aktionen (Anlegen, Aktualisieren, Löschen) enden typischerweise mit einer RedirectResponse.