Contao-Camp 2024
Ergebnis 1 bis 10 von 10

Thema: Symfony 5 – Änderungen an der routing.yml ?

  1. #1
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard Symfony 5 – Änderungen an der routing.yml ?

    Hallo,

    mein Bundle https://github.com/georgpreissl/contao-grix-sitebuilder funtioniert unter Contao 4.12.3 nicht mehr.
    Es können keine Inhaltselemente in den Grid eingefügt werden.

    Ich nehme an die Ursache liegt in der routing.yml
    Denn beim Versuch ein Inhaltselement im Grid einzufügen bekomme ich beim Aufruf der Route:
    http://mycontao/grixsave
    ... einen "500 (Internal Server Error)".

    Unter Contao 4.9.22 hat diese Route jedoch noch funktioniert.
    Kann das an Symfony 5 Änderungen liegen?

    Hier der Inhalt der routing.yml für diese Route:

    Code:
    grix.contoller.grixsave:
        path: /grixsave
        defaults:
            _controller: GeorgPreissl\ContaoGrixBundle\Controller\GrixController::save
            _scope: frontend
            _token_check: false

    ... und das hier ist dann die Funktion dazu:
    Code:
    namespace GeorgPreissl\ContaoGrixBundle\Controller;
    
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\JsonResponse;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Contao\ArticleModel;
    use Contao\PageModel;
    
    class GrixController extends Controller
    {
    
    
        public function save(Request $request)
        {
            $articleId = $request->request->get('articleId'); 
            $grixJs = $request->request->get('grixjs'); 
    	$objResult = \Database::getInstance()->prepare("UPDATE tl_article SET grixJs=? WHERE id=?")->execute($grixJs, $articleId);
    
            return new JsonResponse(array(
    	    'data' => $objResult->affectedRows,
                'status' => 'OK',
                'message' => ['returntest', 'testarray']),
            200);
        }
    
       ....
    ... ist da vielleicht was nicht Symfony 5 konform?
    Bin leider alles andere als ein Symfony-Experte :/

    Danke für eure Hilfe!
    Geändert von thesweetg (22.11.2021 um 09:05 Uhr)

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

    Standard

    Was passiert, wenn du die Route im Debug-Mode aufrufst?
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard

    Also wenn ich eine ".env" erstelle mit dem Inhalt "APP_ENV=dev", dann bekomme ich beim direkten Aufruf von "http://mycontao/grixsave" folgende Fehlermeldung:
    Code:
    ClassNotFoundError
    Attempted to load class "Controller" from namespace "Symfony\Bundle\FrameworkBundle\Controller".
    Did you forget a "use" statement for another namespace?
    Hat sich der Namespace der Controller Klasse geändert?
    D.h. ist das hier:
    Code:
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    ... nicht mehr richtig?

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

    Standard

    Ich denke diese Klasse gibt es in Symfony 5 nicht mehr. Du willst vermutlich eher vom AbstractController erben.
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard

    Danke schon mal für den Tipp.

    Ich verwende nun den AbstractController:
    Code:
    namespace GeorgPreissl\ContaoGrixBundle\Controller;
    
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\JsonResponse;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Contao\ArticleModel;
    use Contao\PageModel;
    
    class GrixController extends AbstractController
    {
    ...
    Jetzt bekomme ich beim Aufruf von https://mycontao/grixsave folgenden Fehler:
    Code:
    "GeorgPreissl\ContaoGrixBundle\Controller\GrixController" has no container set, did you forget to define it as a service subscriber?
    Hab leider keine Ahnung was das nun bedeutet

  6. #6
    Contao-Nutzer
    Registriert seit
    22.10.2021.
    Beiträge
    45

    Standard

    Zitat Zitat von thesweetg Beitrag anzeigen
    Danke schon mal für den Tipp.

    Ich verwende nun den AbstractController:
    Code:
    namespace GeorgPreissl\ContaoGrixBundle\Controller;
    
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\JsonResponse;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Contao\ArticleModel;
    use Contao\PageModel;
    
    class GrixController extends AbstractController
    {
    ...
    Jetzt bekomme ich beim Aufruf von https://mycontao/grixsave folgenden Fehler:
    Code:
    "GeorgPreissl\ContaoGrixBundle\Controller\GrixController" has no container set, did you forget to define it as a service subscriber?
    Hab leider keine Ahnung was das nun bedeutet
    Poste mal deine services.yaml

    ich denke dort fehlt die zuweisung zum container.

    PHP-Code:
            tags:
                - { 
    namecontainer.service_subscriber }
            public: 
    true
            calls
    :
                - [ 
    setContainer, [ '@Psr\Container\ContainerInterface' ] ] 
    Ich denke mal in der services.yaml steht nichts von autoconfig :true
    Geändert von Medy (22.11.2021 um 13:16 Uhr)

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

    Standard

    Brauchst du den AbstractController überhaupt?
    » sponsor me via GitHub or PayPal or Revolut

  8. #8
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard

    Die services.yml ist bei mir komplett leer:
    https://github.com/georgpreissl/cont...g/services.yml


    Code:
            tags:
                - { name: container.service_subscriber }
            public: true
            calls:
                - [ setContainer, [ '@Psr\Container\ContainerInterface' ] ]
    Danke für das obige Snippet.
    Wo muss ich es an mein Bundle anpassen?
    Bzw. warum wird das jetzt in Symfony 5 benötigt?
    Leider bin ich beim Thema Services etc. ziemlich blank – Shame on me


    Die Controller-Klasse verwende ich um meine Ajax-Abfragen zu beantworten.
    So mache ich das:
    https://github.com/georgpreissl/cont...Controller.php
    Soll man das anders machen?


    Vielen Dank für eure Hilfe bei der Sache
    Geändert von thesweetg (23.11.2021 um 07:30 Uhr)

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

    Standard

    Die Frage ist ob du überhaupt etwas vom AbstractController brauchst. Du hast nicht deinen gesamten PHP Code gepostet, daher ist auch nicht ersichtlich, ob du überhaupt etwas vom AbstractController verwendest.
    » sponsor me via GitHub or PayPal or Revolut

  10. #10
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard

    Ah, ok.
    Ich brauche ihn offenbar nicht.

    Hab aus:
    Code:
    class GrixController extends AbstractController
    .... folgendes gemacht:
    Code:
    class GrixController
    Nun funktioniert das Erstellen der Inhaltselemente wieder

    Vielen Dank Spooky!

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
  •