CSP-konformes Inline-Script korrekt registrieren und testen
CSP-konformes Inline-Script korrekt registrieren und testen
~7 Min. Lesezeit Zuletzt aktualisiert am 9. August 2026
Die Team-Seite ist funktional fertig - fehlt nur noch ein entscheidender Schritt aus Kapitel 9: Das Inline-<script> aus Kapitel 21 muss per $hyvaCsp->registerInlineScript() registriert werden, sonst blockiert die strikte CSP des Parent-Themes es im Browser lautlos.
Die Registrierung ergänzen
Direkt nach dem </script>-Tag aus Kapitel 21 kommt die Registrierung dazu - $hyvaCsp steht dabei genau wie $escaper als Standard-Variable in jedem Hyvä-Template zur Verfügung:
<script>
document.addEventListener('alpine:init', () => {
Alpine.data('teamFilter', (members) => ({
/* ... wie in Kapitel 21 ... */
}));
});
</script>
<?php $hyvaCsp->registerInlineScript(); ?>Das vollständige Template im Überblick
Zusammengefasst besteht team/index.phtml jetzt aus vier Teilen, in dieser Reihenfolge:
- PHP-Kopf mit
@var-Annotationen und Zugriff auf ViewModel + JSON-Serializer (Kapitel 19-21). - HTML-Struktur: Überschrift, Kategorie-Buttons, Alpine-
x-for-Grid (Kapitel 20-21). - Inline-
<script>mit derAlpine.data('teamFilter', ...)-Komponente (Kapitel 21). $hyvaCsp->registerInlineScript();direkt danach (dieses Kapitel).
Testen: ohne und mit Registrierung
Um den Effekt der Registrierung wirklich zu sehen, lohnt sich ein bewusster Test: Wird die Zeile $hyvaCsp->registerInlineScript(); testweise entfernt und die Seite neu geladen, verschwindet die Filter-Funktion - die Kategorie-Buttons reagieren nicht mehr auf Klicks, obwohl im Template augenscheinlich nichts kaputt ist.
Achtung: Der Fehler zeigt sich nicht als PHP- oder Magento-Fehler, sondern ausschließlich in der Browser-Konsole (F12 > Konsole) als CSP-Verletzungsmeldung, etwa "Refused to execute inline script because it violates the following Content Security Policy directive...". Das macht diesen Fehler besonders tückisch, wenn man nicht weiß, wo man suchen soll - Kapitel 28 geht darauf noch einmal gezielt ein.
Den vollständigen Flow noch einmal testen
bin/cache-clean
# Browser: /team aufrufen
# 1. Grid zeigt alle vier Team-Mitglieder
# 2. Klick auf "Entwicklung" -> nur Anna und David sichtbar
# 3. Klick auf "Alle" -> wieder alle vier sichtbar
# 4. Netzwerk-Tab der Entwicklertools: kein Request bei Klick
# 5. Konsole der Entwicklertools: keine CSP-VerletzungsmeldungDas durchgehende Projekt abgeschlossen
Damit ist die Team-Seite vollständig: eigenes Modul, Route und Controller, ein ViewModel mit sauber getrennten Daten, ein responsives Tailwind-Template, clientseitige Alpine-Filterung und eine korrekt registrierte CSP-konforme Inline-Skript-Registrierung. Block 6 wendet dieses Wissen jetzt auf bestehende Magento-Standardseiten an - Produktdetailseite, Checkout und Performance.
Tipp: Diese sechs Kapitel (17-22) lassen sich als Vorlage für jede weitere eigene Storefront-Seite in diesem Projekt wiederverwenden: neues Modul, Route, Controller, ViewModel, Tailwind-Template, bei Bedarf Alpine-Interaktivität mit CSP-Registrierung - immer in genau dieser Reihenfolge.