Contao-Camp 2024
Ergebnis 1 bis 3 von 3

Thema: Ajax-Request per POST

  1. #1
    Contao-Nutzer
    Registriert seit
    03.07.2019.
    Beiträge
    1

    Standard Ajax-Request per POST

    Hallo Contao-Community,

    ich programmiere gerade eine API. Per GET - Anfrage lässt sich die API ohne Probleme aufrufen und es lassen sich auch entsprechende Services (wie z.B. contao.framework) laden.
    Bei POST-Anfragen erhalte ich allerdings ein 500er zurück. Die Routes definiere ich über Annotations.

    Ich weiß momentan gerade nicht wodran es hapert. Vllt habt ihr ja eine Idee.

    Ein Ausschnitt aus den Logs:
    HTML-Code:
    [2019-07-03 14:01:08] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
    [2019-07-03 14:01:08] request.CRITICAL: Uncaught PHP Exception Error: "Call to a member function get() on null" at /shared/httpd/ls/src/Controller/Projects.php line 20 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Call to a member function get() on null at /shared/httpd/ls/src/Controller/Projects.php:20)"} []
    Ein kurzer Dump auf \System::getContainer() bei einer POST-Anfrage ergibt NULL. Muss ich den Container in diesem Fall anders laden?
    Composer Autoloader, Composer Cache und Contao Cache habe ich über den Contao-Manager geleert.

    Den Controller habe ich mit zwei identischen Testmethoden gebaut. Mein Controller dazu:
    HTML-Code:
    namespace App\Controller;
    
    use App\Models\ProjectModel;
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\JsonResponse;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    
    class Projects extends AbstractController
    {
    
        ...
    
        /**
         * @Route("/api/test/post", defaults={"_scope" = "frontend", "_token_check" = true}, methods={"POST"})
         *
         * @return JsonResponse
         */
        public function test_post()
        {
            $contaoFramework = \System::getContainer()->get('contao.framework');
            $contaoFramework->initialize();
    	\System::loadLanguageFile('default');
    
    	return new JsonResponse([
                'success' => 'POST'
            ],200);
        }
    
        /**
         * @Route("/api/test/get", defaults={"_scope" = "frontend", "_token_check" = true})
         *
         * @return JsonResponse
         */
        public function test_get()
        {
            $contaoFramework = \System::getContainer()->get('contao.framework');
            $contaoFramework->initialize();
    	\System::loadLanguageFile('default');
    
    	return new JsonResponse([
                'success' => 'GET'
            ],200);
        }
    
        ...
    }
    Meine composer.json:
    HTML-Code:
    {
        "type": "project",
        "require": {
            "contao/calendar-bundle": "^4.7",
            "contao/comments-bundle": "^4.7",
            "contao/conflicts": "*@dev",
            "contao/faq-bundle": "^4.7",
            "contao/listing-bundle": "^4.7",
            "contao/manager-bundle": "4.7.*",
            "contao/news-bundle": "^4.7",
            "contao/newsletter-bundle": "^4.7",
            "derhaeuptling/contao-lazy-images": "^3.0",
            "madeyourday/contao-rocksolid-custom-elements": "^2.2",
            "madeyourday/contao-rocksolid-slider": "^2.0",
            "terminal42/contao-changelanguage": "^3.1"
        },
        "extra": {
            "contao-component-dir": "assets"
        },
        "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        },
        "scripts": {
            "post-install-cmd": [
                "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            ],
            "post-update-cmd": [
                "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            ]
        }
    }
    Braucht ihr noch weitere Informationen von mir?

    Danke schonmal für Eure Hilfe
    Geändert von jaybee111 (03.07.2019 um 13:40 Uhr)

  2. #2
    Contao-Fan
    Registriert seit
    19.06.2009.
    Beiträge
    827

    Standard

    bist du hier weiter gekommen?

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.059
    Partner-ID
    10107

    Standard

    Du kannst dir nicht über \Contao\System den Container holen um darüber den ContaoFramework Service zu holen um damit das Legacy Contao Framework zu initialisieren. Das setzt ja voraus, dass das Legacy Contao Framework bereits initialisiert ist .

    Du musst dir den ContaoFramework Service regulär über Dependency Injection holen.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •