# CategoryService Dokumentation Der `CategoryService` ist eine zentrale Service-Klasse für die Verwaltung aller Kategorien in der Anwendung. ## 📁 Pfad ``` app/Services/CategoryService.php ``` ## 🎯 Zweck Der CategoryService bietet eine zentrale Stelle für: - Kategorie-Definitionen (Name, Slug, Icon, Farbe, etc.) - Farb-Mappings und Gradients - Icon-Pfade für Heroicons - Helper-Methoden für Kategorie-Zugriff ## 📖 Verfügbare Methoden ### 1. `getCategories()` Gibt alle verfügbaren Kategorien zurück. ```php use App\Services\CategoryService; $categories = CategoryService::getCategories(); // Returns: Array mit allen Kategorien ``` **Rückgabe-Struktur:** ```php [ [ 'name' => 'Wirtschaft', 'slug' => 'wirtschaft', 'description' => 'Unternehmensnachrichten, Finanzberichte, Wirtschaftstrends', 'count' => '2.450+', 'icon' => 'chart-bar', 'color' => 'blue', ], // ... weitere Kategorien ] ``` ### 2. `getCategoryBySlug(string $slug)` Findet eine Kategorie anhand ihres Slugs. ```php $category = CategoryService::getCategoryBySlug('wirtschaft'); // Returns: Array mit Kategorie-Daten oder null ``` ### 3. `getCategorySlugs()` Gibt alle Kategorie-Slugs als Array zurück. ```php $slugs = CategoryService::getCategorySlugs(); // Returns: ['wirtschaft', 'technologie', 'gesundheit', ...] ``` ### 4. `getColorGradients()` Gibt alle Farb-Gradient-Mappings zurück. ```php $gradients = CategoryService::getColorGradients(); // Returns: ['blue' => 'from-blue-500/10 to-blue-600/10', ...] ``` ### 5. `getColorClasses()` Gibt alle Farb-CSS-Klassen zurück. ```php $classes = CategoryService::getColorClasses(); // Returns: ['blue' => 'text-blue-500', ...] ``` ### 6. `getGradientForColor(string $color)` Gibt den Gradient für eine bestimmte Farbe zurück. ```php $gradient = CategoryService::getGradientForColor('blue'); // Returns: 'from-blue-500/10 to-blue-600/10' ``` ### 7. `getClassForColor(string $color)` Gibt die CSS-Klasse für eine bestimmte Farbe zurück. ```php $class = CategoryService::getClassForColor('blue'); // Returns: 'text-blue-500' ``` ### 8. `getIconPath(string $iconName)` Generiert den Pfad zu einem Heroicon. ```php $path = CategoryService::getIconPath('chart-bar'); // Returns: '/heroicons/optimized/24/outline/chart-bar.svg' ``` ### 9. `count()` Gibt die Gesamtanzahl der Kategorien zurück. ```php $total = CategoryService::count(); // Returns: 12 ``` ## 🔧 Verwendungsbeispiele ### Beispiel 1: Kategorien in Blade anzeigen ```blade @php use App\Services\CategoryService; $categories = CategoryService::getCategories(); @endphp
@foreach($categories as $category)
{{ $category['name'] }}

{{ $category['name'] }}

{{ $category['description'] }}

@endforeach
``` ### Beispiel 2: Kategorie in Controller verwenden ```php use App\Services\CategoryService; class CategoryController extends Controller { public function show(string $slug) { $category = CategoryService::getCategoryBySlug($slug); if (!$category) { abort(404); } return view('kategorie', [ 'category' => $category, 'allCategories' => CategoryService::getCategories(), ]); } } ``` ### Beispiel 3: Kategorie-Navigation ```blade @php use App\Services\CategoryService; $categories = CategoryService::getCategories(); @endphp ``` ### Beispiel 4: Dropdown mit Kategorien ```blade ``` ### Beispiel 5: Kategorie-Filter in Livewire ```php use App\Services\CategoryService; use Livewire\Component; class PressReleaseFilter extends Component { public $selectedCategory = ''; public $categories = []; public function mount() { $this->categories = CategoryService::getCategories(); } public function render() { return view('livewire.press-release-filter'); } } ``` ### Beispiel 6: Farb-Gradient verwenden ```blade @php use App\Services\CategoryService; $category = CategoryService::getCategoryBySlug('wirtschaft'); $gradient = CategoryService::getGradientForColor($category['color']); $iconColor = CategoryService::getClassForColor($category['color']); @endphp
{{ $category['name'] }}

{{ $category['name'] }}

``` ## 🎨 Verfügbare Kategorien Aktuell sind folgende Kategorien definiert: | Name | Slug | Icon | Farbe | |------|------|------|-------| | Wirtschaft | wirtschaft | chart-bar | blue | | Technologie | technologie | cpu-chip | purple | | Gesundheit | gesundheit | heart | green | | Finanzen | finanzen | currency-dollar | yellow | | Automotive | automotive | truck | red | | Immobilien | immobilien | building-office | indigo | | Energie | energie | bolt | orange | | Bildung | bildung | academic-cap | cyan | | Handel | handel | shopping-cart | pink | | Tourismus | tourismus | globe-alt | teal | | Sport | sport | trophy | lime | | Kultur | kultur | musical-note | violet | ## ➕ Neue Kategorie hinzufügen Um eine neue Kategorie hinzuzufügen, bearbeiten Sie die `getCategories()` Methode in `app/Services/CategoryService.php`: ```php public static function getCategories(): array { return [ // ... bestehende Kategorien [ 'name' => 'Neue Kategorie', 'slug' => 'neue-kategorie', 'description' => 'Beschreibung der neuen Kategorie', 'count' => '0+', 'icon' => 'icon-name', // Heroicon Name 'color' => 'emerald', // Farbe ], ]; } ``` **Wichtig:** Wenn Sie eine neue Farbe verwenden, fügen Sie diese auch in `getColorGradients()` und `getColorClasses()` hinzu! ## 🎯 Best Practices 1. **Verwenden Sie immer den CategoryService** statt hardcodierte Kategorien 2. **Caching:** Für bessere Performance können Kategorien gecacht werden 3. **Validierung:** Nutzen Sie `getCategoryBySlug()` zur Validierung von Kategorie-Parametern 4. **Konsistenz:** Alle Kategorie-Daten sollten nur über den Service abgerufen werden ## 🔄 Migration von inline Arrays **Vorher:** ```blade @php $categories = [ ['name' => 'Wirtschaft', 'slug' => 'wirtschaft', ...], // ... ]; @endphp ``` **Nachher:** ```blade @php use App\Services\CategoryService; $categories = CategoryService::getCategories(); @endphp ``` ## 📊 Performance-Tipps Wenn Sie die Kategorien häufig verwenden, können Sie sie in einem View Composer laden: ```php // app/Providers/ViewServiceProvider.php use App\Services\CategoryService; use Illuminate\Support\Facades\View; public function boot() { View::composer('*', function ($view) { $view->with('globalCategories', CategoryService::getCategories()); }); } ``` Dann in Blade: ```blade @foreach($globalCategories as $category) @endforeach ``` ## 🧪 Testing Beispiel für einen Test: ```php use App\Services\CategoryService; use Tests\TestCase; class CategoryServiceTest extends TestCase { public function test_get_categories_returns_array() { $categories = CategoryService::getCategories(); $this->assertIsArray($categories); $this->assertNotEmpty($categories); } public function test_get_category_by_slug() { $category = CategoryService::getCategoryBySlug('wirtschaft'); $this->assertNotNull($category); $this->assertEquals('Wirtschaft', $category['name']); } } ``` ## 📝 Changelog - **v1.0** - Initiale Version mit allen 12 Kategorien - Unterstützt Heroicons - Farb-Mappings für alle Kategorien - Helper-Methoden für einfachen Zugriff