"not allowed by security setting" - Wie ist es korrekt?

Guten Morgen zusammen,

ich registriere mein Template-Directory wie folgt:

$view = $args->getSubject()->View();
$view->addTemplateDir($this->Path() . 'Views');

Dadurch wird folgender Fehler geworfen:

/engine/Shopware/Plugins/Community/Frontend/XYZ/Views/frontend/index/index.tpl' not allowed by security setting

Die Hinweise aus folgender Dokumentation haben mir leider nicht weitergeholfen: Shopware 5 upgrade guide

Wie muss den der Code korrekt lauten? Vielen Dank vorab.

Viele Grüße,
Frank

Das Problem geschieht schon etwas früher. Du registrierst das Template-Verzeichnis wahrscheinlich im PostDispatchSecure_ Frontend  Event. Jetzt kann es aber passieren, dass dein Template bei einem Request auf das Widgets Modul eingebunden wird. Dann ist dein Template Verzeichnis aber nicht registriert => Fehler.

Lösung:

A) Du registrierst dein Template-Verzeichnis bei jedem möglichen Modul, wo es aufgerufen werden könnte (PostDispatch_Backend, PostDispatch_Widgets, …)

B ) Du lässt einfach das  _Frontend  weg. Damit bist du auf der sicheren Seite. Aber Achtung! Dann am besten im Event-Listener nur das Template-Verzeichnis registrieren und keine Manipulation an den TPL-Variablen o.ä. durchführen. Sonst passiert das evtl. an ungewünschten Bereichen.

Viele Grüße

Hallo,

 

also generell sind nur noch eine Hand voll Smarty Funktionen erlaubt. Welche das alle im einzelnen sind, findest du hier: shopware/smarty_functions.php at 5.4 · shopware/shopware · GitHub

Musst also deine Templates durchgehen und nicht erlaubte Funktionen ersetzen/ entfernen.

 

 

MFG

 

derwunner

Vielen Dank für Deine Antwort.

Die Module werden wir folgt registriert:

$this->subscribeEvent(
            'Enlight_Controller_Action_PostDispatch_Frontend',
            'onPostDispatch'
        );
		
		$this->subscribeEvent(
            'Enlight_Controller_Action_PostDispatch_Widgets',
            'onPostDispatch'
        );

Es wird jeweils die gleiche Funktion aufgerufen.

Kannst du mal nicht so sparsam sein mit dem Code? :D 
Wo rufst du denn das $this->subscribeEvent auf? In der install-Methode des Plugins? Hast du es mal neuinstalliert? Kannst du mal prüfen, ob das Event auch ganz sicher auch getriggert wird? (Dazu am besten zwei verschiedene Funktionen je Event erstellen und prüfen, ob wirklich beide auch aufgerufen werden)

Viele Grüße

1 „Gefällt mir“

@simkli schrieb:

Kannst du mal nicht so sparsam sein mit dem Code? :D 
Wo rufst du denn das $this->subscribeEvent auf? In der install-Methode des Plugins? Hast du es mal neuinstalliert? Kannst du mal prüfen, ob das Event auch ganz sicher auch getriggert wird? (Dazu am besten zwei verschiedene Funktionen je Event erstellen und prüfen, ob wirklich beide auch aufgerufen werden)

Viele Grüße

Die Neuinstallation war es. Merkwürdig, dass hatte ich noch nie. Danke Dir. 

@webarbeit schrieb:

Die Neuinstallation war es. Merkwürdig, dass hatte ich noch nie. Danke Dir. 

Plugins nach der alten Struktur müssen bei einer Event Änderung immer neuinstalliert werden, weil die in die Datenbank eingetragen werden. In der Update Methode geht das nur bescheiden, weil das von Shopware danch wieder geändert wird (siehe Forums-Thread).

Plugins nach der neuen Struktur (5.2) müssen nicht neuinstalliert werden, weil das da Shopware jedes mal direkt aus dem Plugin ausliest, welche Events es hat.