activeChannel(); $terms = TaxonomyTerm::withCount('publications') ->where('channel_id', $channel->id) ->orderBy('title') ->get(); return view('admin::taxonomy.index', compact('channel', 'terms')); } public function create(): View { $channel = $this->activeChannel(); $term = new TaxonomyTerm(); return view('admin::taxonomy.form', compact('channel', 'term')); } public function store(Request $request): RedirectResponse { $channel = $this->activeChannel(); $request->validate([ 'title' => ['required', 'string', 'max:255'], ]); $slug = Str::slug($request->title); $exists = TaxonomyTerm::where('channel_id', $channel->id)->where('slug', $slug)->exists(); if ($exists) { return back()->withErrors(['title' => 'A term with this slug already exists in this channel.'])->withInput(); } TaxonomyTerm::create([ 'channel_id' => $channel->id, 'title' => $request->title, 'slug' => $slug, ]); return redirect()->route('admin.taxonomy.index') ->with('success', "Term \"{$request->title}\" created."); } public function edit(TaxonomyTerm $term): View { $channel = $this->activeChannel(); abort_if($term->channel_id !== $channel->id, 403); return view('admin::taxonomy.form', compact('channel', 'term')); } public function update(Request $request, TaxonomyTerm $term): RedirectResponse { $channel = $this->activeChannel(); abort_if($term->channel_id !== $channel->id, 403); $request->validate([ 'title' => ['required', 'string', 'max:255'], ]); $slug = Str::slug($request->title); $term->update(['title' => $request->title, 'slug' => $slug]); return redirect()->route('admin.taxonomy.index') ->with('success', "Term \"{$term->title}\" updated."); } public function destroy(TaxonomyTerm $term): RedirectResponse { $channel = $this->activeChannel(); abort_if($term->channel_id !== $channel->id, 403); $title = $term->title; $term->delete(); return redirect()->route('admin.taxonomy.index') ->with('success', "Term \"{$title}\" deleted."); } }