Files
breadcrumb-the-shire/docs/howto-globale-suche.md
fs 0e86925464 refactor: rename lib/ to core/ for clearer core-module separation
Rename the top-level lib/ directory to core/ so the project root
immediately communicates which code is core platform and which lives
in modules/. PHP namespaces (MintyPHP\*) are unchanged — only the
Composer PSR-4 path mapping moves from lib/ to core/.

Module-internal lib/ directories (modules/*/lib/) are untouched.

Updated across the full stack:
- composer.json PSR-4 mapping
- bootstrap entry points (web/index.php, bin/*, tests/bootstrap.php)
- tooling configs (phpstan.neon, phpunit.xml, php-cs-fixer)
- 26 architecture contract tests
- enforcement-policy, guard-catalog, quality-gates
- all documentation (CLAUDE.md, README, 25 docs/, .agents/skills/)
- bin/qa-extended.sh search paths
- .claude/settings.local.json permission paths

Workflow: .agents/runs/CORE-LIB-RENAME-001/ (Analyst → Planner →
Executor → Code Review (4 findings fixed) → Security Review →
Acceptance Test → Finalizer)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 23:20:42 +02:00

2.1 KiB

Globale Suche erweitern

Letzte Aktualisierung: 2026-04-01

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:

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

Provider:

  • SQL-Definitionen: SearchSqlResourceProvider
  • UI-Meta (Icons/URLs): SearchUiMetaProvider
  • Mapping: SearchItemMapperProvider
  • Spezialquellen (docs, hotkeys): SearchSpecialResourceProvider
  • Modul-Erweiterungen: SearchResourceProvider via Modul-Manifest search_resources

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. Bei Modul-Resources: Provider-Klasse in module.php unter search_resources registrieren.
  6. i18n-Labels pruefen.

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 core/Support/SearchConfig.php
  2. php -l core/Support/Search/*.php
  3. Preview testen (admin/search/data?q=...)
  4. Vollsuche testen (/search?search=...)
  5. Permission/Scope mit reduziertem User prüfen