8.5 KiB
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.
use App\Services\CategoryService;
$categories = CategoryService::getCategories();
// Returns: Array mit allen Kategorien
Rückgabe-Struktur:
[
[
'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.
$category = CategoryService::getCategoryBySlug('wirtschaft');
// Returns: Array mit Kategorie-Daten oder null
3. getCategorySlugs()
Gibt alle Kategorie-Slugs als Array zurück.
$slugs = CategoryService::getCategorySlugs();
// Returns: ['wirtschaft', 'technologie', 'gesundheit', ...]
4. getColorGradients()
Gibt alle Farb-Gradient-Mappings zurück.
$gradients = CategoryService::getColorGradients();
// Returns: ['blue' => 'from-blue-500/10 to-blue-600/10', ...]
5. getColorClasses()
Gibt alle Farb-CSS-Klassen zurück.
$classes = CategoryService::getColorClasses();
// Returns: ['blue' => 'text-blue-500', ...]
6. getGradientForColor(string $color)
Gibt den Gradient für eine bestimmte Farbe zurück.
$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.
$class = CategoryService::getClassForColor('blue');
// Returns: 'text-blue-500'
8. getIconPath(string $iconName)
Generiert den Pfad zu einem Heroicon.
$path = CategoryService::getIconPath('chart-bar');
// Returns: '/heroicons/optimized/24/outline/chart-bar.svg'
9. count()
Gibt die Gesamtanzahl der Kategorien zurück.
$total = CategoryService::count();
// Returns: 12
🔧 Verwendungsbeispiele
Beispiel 1: Kategorien in Blade anzeigen
@php
use App\Services\CategoryService;
$categories = CategoryService::getCategories();
@endphp
<div class="grid grid-cols-3 gap-4">
@foreach($categories as $category)
<a href="/kategorie/{{ $category['slug'] }}">
<div class="category-card">
<img src="{{ CategoryService::getIconPath($category['icon']) }}"
alt="{{ $category['name'] }}">
<h3>{{ $category['name'] }}</h3>
<p>{{ $category['description'] }}</p>
</div>
</a>
@endforeach
</div>
Beispiel 2: Kategorie in Controller verwenden
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
@php
use App\Services\CategoryService;
$categories = CategoryService::getCategories();
@endphp
<nav class="category-nav">
@foreach($categories as $category)
<a href="/kategorie/{{ $category['slug'] }}"
class="nav-item {{ request()->segment(2) === $category['slug'] ? 'active' : '' }}">
{{ $category['name'] }}
</a>
@endforeach
</nav>
Beispiel 4: Dropdown mit Kategorien
<select name="category" class="form-select">
<option value="">Kategorie wählen</option>
@foreach(App\Services\CategoryService::getCategories() as $cat)
<option value="{{ $cat['slug'] }}">{{ $cat['name'] }}</option>
@endforeach
</select>
Beispiel 5: Kategorie-Filter in Livewire
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
@php
use App\Services\CategoryService;
$category = CategoryService::getCategoryBySlug('wirtschaft');
$gradient = CategoryService::getGradientForColor($category['color']);
$iconColor = CategoryService::getClassForColor($category['color']);
@endphp
<div class="bg-gradient-to-br {{ $gradient }} rounded-lg p-4">
<img src="{{ CategoryService::getIconPath($category['icon']) }}"
class="h-8 w-8 {{ $iconColor }}"
alt="{{ $category['name'] }}">
<h3>{{ $category['name'] }}</h3>
</div>
🎨 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:
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
- Verwenden Sie immer den CategoryService statt hardcodierte Kategorien
- Caching: Für bessere Performance können Kategorien gecacht werden
- Validierung: Nutzen Sie
getCategoryBySlug()zur Validierung von Kategorie-Parametern - Konsistenz: Alle Kategorie-Daten sollten nur über den Service abgerufen werden
🔄 Migration von inline Arrays
Vorher:
@php
$categories = [
['name' => 'Wirtschaft', 'slug' => 'wirtschaft', ...],
// ...
];
@endphp
Nachher:
@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:
// 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:
@foreach($globalCategories as $category)
<!-- ... -->
@endforeach
🧪 Testing
Beispiel für einen Test:
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