Files
breadcrumb-the-shire/docs/howto-globale-suche.md

2.0 KiB

Globale Suche erweitern

Letzte Aktualisierung: 2026-03-06

Ziel

Neue Search-Resource korrekt in Aside-Preview und Vollsuche integrieren.

Architektur

Zwei Endpunkte teilen dieselbe Konfiguration:

  • Aside-Preview: pages/admin/search/data().php
  • Vollsuche: pages/search/data().php

Zentrale Fassade:

  • lib/Support/SearchConfig.php
  • Laufzeit-Orchestrierung: lib/Service/Search/SearchDataService.php
  • SQL-Ausführung: lib/Repository/Search/SearchQueryRepository.php

Provider:

  • SQL-Definitionen: SearchSqlResourceProvider
  • UI-Meta (Icons/URLs): SearchUiMetaProvider
  • Mapping: SearchItemMapperProvider
  • Spezialquellen (docs, hotkeys): SearchSpecialResourceProvider

Laufzeitpfad

  1. pages/admin/search/data().php oder pages/search/data().php
  2. SearchDataService baut Scope/Permission + Resource-Iteration
  3. SearchQueryRepository führt countSql/previewSql/resultSql aus
  4. SearchConfig mapped auf API/UI-Items

Standardablauf für neue Resource

  1. Resource in SearchSqlResourceProvider::resources() ergänzen:
    • key, label, permission
    • countSql, previewSql, resultSql
  2. Bei Tenant-Daten tenantScopeFilters() ergänzen.
  3. UI ergänzen:
    • iconForKey()
    • listUrl()
  4. Mapping ergänzen:
    • mapPreviewItem()
    • mapResultItem()
  5. Aside-Eintrag in templates/partials/app-main-aside.phtml ergänzen (data-search-key).
  6. i18n-Labels prüfen.

Wichtige Regeln

  • Permission immer serverseitig in der Resource setzen.
  • Tenant-Scope nicht nur im UI lösen.
  • Preview immer mit limit ? und ohne sensitive Daten.

Docs-Resource

Die Entwicklerdoku läuft als Spezialresource docs:

  • Quelle: DocsCatalogService::search()
  • Permission: docs.view
  • Ziel: admin/docs/{slug}#anchor

Check vor Merge

  1. php -l lib/Support/SearchConfig.php
  2. php -l lib/Support/Search/*.php
  3. Preview testen (admin/search/data?q=...)
  4. Vollsuche testen (/search?search=...)
  5. Permission/Scope mit reduziertem User prüfen