Wie mit "tpl + Javascript (Ajax-Controller-Aufruf) + Controller" etwas in Datenbank schreiben?

Hallo Zusammen,

Dank jakko https://forum.shopware.com/discussion/comment/215627 der meine Frag hier eig schon beantwortet hat aber nur in Shopware 4. Das ganze brauch ich halt nur für die Version 5.3 in Shopware.

Kann mir einer sagen was ich beim umschreiben für mein Projekt falsch gemacht habe? Leider wird mein Controller nicht geladen. Oder ist es was anderes? Foot-in-Mouth

Das ist meine TestPlugin.php:

Dann hab ich folgende Ordner mit Inhalten:

Controllers/Frontend/MeinControllerTest.php:

Plugins()->Controller()->ViewRenderer()->setNoRender();

        $sql = "INSERT INTO tjl_status (s_status) VALUES ('123');";
        Shopware()->DB()->query($sql);
    }

}

Resources/services.xml:

Resources/views/frontend/checkout/confirm.tpl:

{extends file='parent:frontend/checkout/confirm.tpl'}





{block name="frontend_checkout_confirm_submit"}

    {$smarty.block.parent}
    
    
    
    

    

    

        $( document ).ready(function() {


            $(".myDiv").click(function(){
                var myurl = $(".myDiv").find('input[name=requestUrl]').val();

                $.ajax({

                    // the URL for the request
                    url: myurl,
                    // the type of data we expect back
                    dataType : "json",
                    // code to run regardless of success or failure
                    complete: function( xhr, status ) {
                        alert( "Js wurde ausgeführt!" );
                    }
                });

            });

        });

    

    
        
        Test DB eintrag!
    



{/block}

Subscriber/LinkSubscriber.php:

 'onPostDispatchCheckout',
            'Enlight_Controller_Dispatcher_ControllerPath_Frontend_MeinControllerTest' => 'onGetFrontendController'
        ];
    }


    public function onGetFrontendController(Enlight_Event_EventArgs $args){



        return $this->Path() . '/Controllers/Frontend/MeinControllerTest.php';

        

    }

    /**
     * @param Enlight_Event_EventArgs $args
     */

    public function onPostDispatchCheckout(Enlight_Event_EventArgs $args){

        /** @var Enlight_Controller_Action $controller */
        $controller = $args->get('subject');
        $view = $controller->View();
        $view->addTemplateDir(implode(DIRECTORY_SEPARATOR, [__DIR__ , '..', 'Resources', 'views']));


    }


}

Danke schon mal im Vorraus für die Hilfe Smile

Hallo,

im Prinzip steht doch aber schon in der Fehlermeldung die “Lösung”? Siehe: CSRF Protection .

Grüße

Sebastian

1 „Gefällt mir“

@sschreier schrieb:

Hallo,

im Prinzip steht doch aber schon in der Fehlermeldung die „Lösung“? Siehe: https://developers.shopware.com/developers-guide/csrf-protection/#protect-get-requests-via-csrf-tokens .

Grüße

Sebastian

Danke Sebatian.

Leider bin ich noch relativ neu in Shopware. Was muss ich denn machen um den Fehler zu vermeiden?

Gruß Tobias

Naja in deine Klasse erbt von Enlight_Controller_Action. Gleichzeitig schreibst du weiter oben aber Namespace TestPlugin\Controllers\Frontend. In diesem Namespace gibt es die Klasse Enlight_Controller_Action doch gar nicht.

Lösung1: Du schreibt einen Backslash vor Enlight_ControllerAction 

Lösung2: Du importierst die Klasse via use \Enlight_Controller_Action. 

Lese dir am besten mal das Kaptiel zu Namespaces in der PHP-Dokumentation durch :wink:

Viele Grüße

1 „Gefällt mir“

Danke für die Antwort @simkli‍.

Leider haben die beiden Lösungen auch nicht funltioniert. ich hab immer noch die gliche Fehlermeldung.

Viele Grüße

Tobias