Contao Konferenz & College 2019 in Duisburg - JETZT TICKET SICHERN!
Ergebnis 1 bis 16 von 16

Thema: Ajax-Call mit einer Route will nicht klappen

  1. #1
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    201

    Gesicht zeigt die Zunge Ajax-Call mit einer Route will nicht klappen

    Hallo,

    ich hab in meinem Bundle eine routing.yml unter:
    mycontao/vendor/georgpreissl/imagefilter/src/Resources/config/routing.yml

    ... mit folgendem Inhalt:
    Code:
    test:
        path: /test
        defaults:
            _controller: 'Imagefilter\Controller\ImagefilterController::loadAction'
            _scope: frontend
            _token_check: false


    Dazu noch den Controller unter:
    mycontao/vendor/georgpreissl/imagefilter/src/Controller/ImagefilterController.php

    ... mit folgendem Inhalt:
    Code:
    <?php
    
    namespace GeorgPreissl\Imagefilter; 
    
    use Contao\CoreBundle\Exception\PageNotFoundException;
    use Contao\CoreBundle\Framework\ContaoFramework;
    use Contao\FilesModel;
    use Contao\StringUtil;
    use Contao\Validator;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\BinaryFileResponse;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\HttpFoundation\Session\Session;
    use Symfony\Component\HttpFoundation\JsonResponse; 
    
    class ImagefilterController extends Controller
    {
    
    	/**
    	 * @Route("/test/")
    	 */
    	public function loadAction(): Response
    	{
    		$objArticleModel = \ArticleModel::findByPk(1);
    		$title = $objArticleModel->title;    	
    		return new JsonResponse($title); 
    	}
    }


    Und das Javascript im Backend-Template dazu:
    Code:
    	$('[type=radio]').click(function(e) {
    		e.preventDefault();
    
    		$.ajax({
    			type: "POST",
    			url: "/test",
    			success: function(data) {
    				console.log('data: ',data);
    			},  
    			error: function(msg) {
    				console.log(msg);
    			}
    		});
    	});


    ... dennoch weigert sich der Ajax-Call beharrlich zu funktionieren

    Ich bekomme bei dem Klick auf den Radio-Button in der DevTools-Console einen:
    Code:
    VM527:1 POST http://mycontao/test 404 (Not Found)

    Kann mir jemand sagen/schreiben was ich hier falsch mache?
    Bitte um eure Hilfe – vielen Dank im Voraus.
    Geändert von thesweetg (10.09.2019 um 09:13 Uhr)

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    21.090
    User beschenken
    Wunschliste

    Standard

    Hast du die routing.yaml vom Manager Plugin (oder selbst) laden lassen?

  3. #3
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    201

    Standard

    Die lade ich unter:
    mycontao/vendor/georgpreissl/imagefilter/src/ContaoManager/Plugin.php

    mit dem Inhalt:
    Code:
    <?php
    
    namespace GeorgPreissl\Imagefilter\ContaoManager;
    
    use Contao\CoreBundle\ContaoCoreBundle;
    use Contao\ManagerPlugin\Bundle\Config\BundleConfig;
    use Contao\ManagerPlugin\Bundle\BundlePluginInterface;
    use Contao\ManagerPlugin\Bundle\Parser\ParserInterface;
    use Contao\ManagerPlugin\Routing\RoutingPluginInterface;
    use GeorgPreissl\Imagefilter\GeorgPreisslImageFilter;
    
    class Plugin implements BundlePluginInterface
    {
    
        public function getBundles(ParserInterface $parser)
        {
            return [
                BundleConfig::create(GeorgPreisslImageFilter::class)
                    ->setLoadAfter([ContaoCoreBundle::class]),
            ];
        }
    
        public function getRouteCollection(LoaderResolverInterface $resolver, KernelInterface $kernel)
        {
            return $resolver
                ->resolve(__DIR__.'/../Resources/config/routing.yml')
                ->load(__DIR__.'/../Resources/config/routing.yml');
        }
    
    }

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    21.090
    User beschenken
    Wunschliste

    Standard

    Gib auf der Konsole mal vendor/bin/contao-console debug:router ein und poste die Ausgabe.

  5. #5
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.401
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Die Route lautet auf
    Code:
    /test/
    und du schickst einen POST Request auf
    Code:
    /test
    , wie soll das gehen?
    Mit und ohne trailing Slash sind zwei verschiedene Routen.
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    21.090
    User beschenken
    Wunschliste

    Standard

    Naja in der routing.yaml steht ja /test. Die Annotation wird nicht genommen.

  7. #7
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    201

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Gib auf der Konsole mal vendor/bin/contao-console debug:router ein und poste die Ausgabe.
    Das spuckt mir eine Reihe von "Fehlermeldungen" aus:
    Code:
     [WARNING] Some commands could not be registered:
    
    
    In ConnectionFactory.php line 79:
    
      An exception occured while establishing a connection to figure out your platform version.
      You can circumvent this by setting a 'server_version' configuration value
    
      For further information have a look at:
      https://github.com/doctrine/DoctrineBundle/issues/673
    
    
    In AbstractMySQLDriver.php line 113:
    
      An exception occurred in driver: SQLSTATE[HY000] [2002] No such file or directory
    
    
    In PDOConnection.php line 50:
    
      SQLSTATE[HY000] [2002] No such file or directory
    
    
    In PDOConnection.php line 46:
    
      SQLSTATE[HY000] [2002] No such file or directory
    
    
    
    In ConnectionFactory.php line 79:
    
      An exception occured while establishing a connection to figure out your platform version.
      You can circumvent this by setting a 'server_version' configuration value
    
      For further information have a look at:
      https://github.com/doctrine/DoctrineBundle/issues/673
    
    
    In AbstractMySQLDriver.php line 113:
    
      An exception occurred in driver: SQLSTATE[HY000] [2002] No such file or directory
    
    
    In PDOConnection.php line 50:
    
      SQLSTATE[HY000] [2002] No such file or directory
    
    
    In PDOConnection.php line 46:
    
      SQLSTATE[HY000] [2002] No such file or directory
    ... aber ich denke keine hat was mit dem Routing zu tun, oder?

  8. #8
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    201

    Standard

    Zitat Zitat von Toflar Beitrag anzeigen
    Die Route lautet auf
    Code:
    /test/
    und du schickst einen POST Request auf
    Code:
    /test
    , wie soll das gehen?
    Mit und ohne trailing Slash sind zwei verschiedene Routen.
    Die Änderung von
    Code:
    	/**
    	 * @Route("/test/")
    	 */
    auf
    Code:
    	/**
    	 * @Route("/test")
    	 */
    ... hat leider nichts bewirkt.

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    21.090
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von thesweetg Beitrag anzeigen
    Das spuckt mir eine Reihe von "Fehlermeldungen" aus:
    Code:
     [WARNING] Some commands could not be registered:
    
    
    In ConnectionFactory.php line 79:
    
      An exception occured while establishing a connection to figure out your platform version.
      You can circumvent this by setting a 'server_version' configuration value
    
      For further information have a look at:
      https://github.com/doctrine/DoctrineBundle/issues/673
    
    
    In AbstractMySQLDriver.php line 113:
    
      An exception occurred in driver: SQLSTATE[HY000] [2002] No such file or directory
    
    
    In PDOConnection.php line 50:
    
      SQLSTATE[HY000] [2002] No such file or directory
    
    
    In PDOConnection.php line 46:
    
      SQLSTATE[HY000] [2002] No such file or directory
    
    
    
    In ConnectionFactory.php line 79:
    
      An exception occured while establishing a connection to figure out your platform version.
      You can circumvent this by setting a 'server_version' configuration value
    
      For further information have a look at:
      https://github.com/doctrine/DoctrineBundle/issues/673
    
    
    In AbstractMySQLDriver.php line 113:
    
      An exception occurred in driver: SQLSTATE[HY000] [2002] No such file or directory
    
    
    In PDOConnection.php line 50:
    
      SQLSTATE[HY000] [2002] No such file or directory
    
    
    In PDOConnection.php line 46:
    
      SQLSTATE[HY000] [2002] No such file or directory
    ... aber ich denke keine hat was mit dem Routing zu tun, oder?
    Laut diesen Meldungen ist keine Datenbank konfiguriert.

  10. #10
    Contao-Fan
    Registriert seit
    16.11.2012.
    Ort
    Freiburg
    Beiträge
    508

    Standard

    In der Plugin muss ja noch RoutingPluginInterface implementiert werden
    Grüße
    Alex

  11. #11
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    201

    Standard

    OK, danke schon mal für den Hinweis.

    Ich habe jetzt folgendes ergänzt:
    Code:
    class Plugin implements BundlePluginInterface, RoutingPluginInterface
    Der Ajax-Call liefert mir nun in der DevTools-Console ein:
    VM1308:1 POST http://demo23/test 500 (Internal Server Error)

    Wenn ich die URL "http://mycontao/test" direkt im Browser aufrufe, bekomme ich eine Contao-Fehlermeldung.
    Sie sagt mir dass der Controller nicht gefunden wird:
    Internal Server Error
    Was ist das Problem?
    The controller for URI "/test" is not callable. Controller "Imagefilter\Controller\ImagefilterController" does neither exist as service nor as class



    Offenbar wird die Controller-Klasse nicht geladen.

    Das hier ist meine composer.json:
    Code:
    {
        "name": "georgpreissl/imagefilter",
    	"homepage":"https://github.com/georgpreissl/imagefilter",    
        "description": "Contao bundle to apply filters on images in the backend.",
        "keywords": ["filter", "georgpreissl", "bundle", "module", "contao"],
        "type": "contao-bundle",
        "license": "LGPL-3.0-or-later",
        "authors": [
            {
                "name": "Georg Preissl",
                "homepage": "https://github.com/georgpreissl",
                "role":"Developer"            
            }
        ],
        "support":{
            "website":"https://www.georg-preissl.at",
            "issues":"https://github.com/georgpreissl/imagefilter/issues",
            "source":"https://github.com/georgpreissl/imagefilter"
        },
        "require": {
            "php": "^5.6|^7.0",
            "contao/core-bundle": "~4.4"        
        },
        "require-dev": {
            "contao/manager-plugin": "^2.0"
        },
        "conflict": {
            "contao/manager-plugin": "<2.0 || >=3.0"
        },
        "autoload": {
            "psr-4": {
                "GeorgPreissl\\Imagefilter\\": "src/"
            },
            "classmap": [
                "src/Resources/contao/"
            ],
            "exclude-from-classmap": [
                "src/Resources/contao/config/",
                "src/Resources/contao/dca/",
                "src/Resources/contao/languages/",
                "src/Resources/contao/templates/"
            ]
        },
        "extra": {
            "contao-manager-plugin": "GeorgPreissl\\Imagefilter\\ContaoManager\\Plugin"
        }
    }
    ... die müsste ja so passen, oder?

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    21.090
    User beschenken
    Wunschliste

    Standard

    Du hast noch zwei Fehler:

    • Falscher Namespace für den Controller.
    • Falscher Namespace in der routing.yaml für den Controller.

  13. #13
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    201

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Laut diesen Meldungen ist keine Datenbank konfiguriert.
    Hm, komisch
    Contao läuft ganz normal unter MAMP.
    Hab auch soeben auf die 4.8.2 aktualisiert.

  14. #14
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    201

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du hast noch zwei Fehler:

    • Falscher Namespace für den Controller.
    • Falscher Namespace in der routing.yaml für den Controller.
    Wenn ich beim Controller folgenden Namespace angebe:
    Code:
    namespace GeorgPreissl\Imagefilter;
    ... und in der routing.yml folgende Angabe mache:
    Code:
    _controller: 'GeorgPreissl\Imagefilter\ImagefilterController::loadAction'
    ... dann funktionierts.

    Allerdings nur bei meiner gesymlinkten Test-Installation des Bundles.
    Wenn ich das Bundle per composer von Packagist installiere gehts nicht mehr.
    Dann kommt die Fehlermeldung:
    Class "GeorgPreissl\Imagefilter\ImagefilterControlle r" does not exist.


    Wie sollte der Namespace für den Controller richtig lauten?

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    21.090
    User beschenken
    Wunschliste

    Standard

    Dein Controller befindet sich im Ordner src/Controller/.
    Dein Autoloading hat definiert, dass der Ordner src/ auf den PSR-4 Namespace GeorgPreissl\Imagefilter\ gemapped wird.
    Ergo muss sich dein Controller im Namespace GeorgPreissl\Imagefilter\Controller befinden .

  16. #16
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    201

    Standard

    OK, danke für die Hilfe
    Jetzt klappt es.

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
  •