Oxid Controller return View -> Class not Found

Hallo zusammen,
irgendwie habe ich ein Problem, und sehe den Fehler einfach nicht :frowning:

Ich habe ein eigenes Modul, mit einem eigenen Controller:

class ApplyServiceController extends FrontendController
{

    protected $_sThisTemplate = 'apply_formular.tpl';

    public function render(): ?string
    {
        parent::render();
        return $this->_sThisTemplate;
    }
}

Ich möchte einfach nur das, das das Template ausgegeben wird.
Bekomme aber in der oxlog folgenden Fehler:

[2021-10-14 21:12:37] OXID Logger.ERROR: ERROR_MESSAGE_SYSTEMCOMPONENT_CLASSNOTFOUND apply_formular.tpl

Egal was für ein tpl ich angebe (auch Oxid Standard Templates, zum testen), ich bekomme immer den Fehler CLASSNOTFOUND.

Das Template habe ich in der metadata definiert:

'templates'   => [
        'apply_formular.tpl' => 'ApplyService/views/tpl/apply_formular.tpl',
    ],

Und wenn ich den Controller zum testen ein die(“test”) schreibe, wird mir das auch ausgegeben.

Hat jemand eine Idee was ich falsch mache?

Verwendet wird oxid 6.2

Wo schreibst den Dein “test” rein und wie rufst Deinen Controller auf.

Merkwürdig finde ich die Fehlermeldung

[2021-10-14 21:12:37] OXID Logger.ERROR: ERROR_MESSAGE_SYSTEMCOMPONENT_CLASSNOTFOUND apply_formular.tpl

Weil apply_formular.tpl Dein Template ist und keine Klasse… Rufst Du mit /index.php?cl=apply_formular.tpl auf?

Wie sieht Deine Controller Anmeldung in Deiner metadata.php aus?

Das test habe ich gleich als erstes in den Controller geschrieben, um zu prüfen, ob er überhaupt den Controller findet und aufruft. Das hat ja auch geklappt. Der Controller ist wie folgt in der metadata angemeldet:

'controllers' => [
        'ApplyServiceController' => \ApplyService\Controller\ApplyServiceController::class
    ],

Merkwürdig finde ich die Fehlermeldung

Ja das verstehe ich auch nicht, wieso er versucht eine Klasse aufzurufen, obwohl ein Template ist.

Aus ApplyServiceController würde ich erstmal alles in Kleinbuchstaben setzen applyservicecontroller. Ein Blick in die Dokumentation verdeutlicht dies:

* Take care you declare the keys always in lower case!

Quelle: controllers — OXID eShop developer documentation 6.2.0 documentation

Dann ist halt die Frage wie Deinen Controller im Frontend aufrust. Dies wäre dann /index.php?cl=applyservicecontroller

Ich rufe den Controller wie folgt auf:

index.php?cl=ApplyServiceController&fnc=render

Das mit dem klein schreiben, teste ich mal. Danke für den Hinweis.

Das &fnc=render kannst weglassen, weil dies unnötig. Dafür sorgt der FrontendController bzw. die OXID Core Logik.

Im Grunde brauchst auch nur protected $_sThisTemplate = 'apply_formular.tpl'; und kannst render() Methode weglassen, wenn die nicht benötigst um Werte zu setzen etc.

Wenn ich &fnc=render beim Aufrufen des Controllers weg lasse, geht es…
Kann ich mir nicht ganz erklären, aber es geht nun.

Vielen Dank für eine Unterstützung, und ein schönes Wochenende.

1 Like

weil es dann unnötig nochmals aufgerufen wird…

Gerne, gleichfalls.