Ergebnis 1 bis 2 von 2

Thema: 4.13.x Error bei Controller mit Route

  1. #1
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard 4.13.x Error bei Controller mit Route

    Guten Abend Community,

    ich habe neu eine 4.13er Contao-Version aufgesetzt und bin gerade dabei, einige Dinge auszuprobieren. Ich habe mir ein paar Routen erstellt und die dazugehörigen Controller. Meine Dateien sehen wie folgt aus:
    services.yaml
    Code:
    services:
        _defaults:
            autowire: true
            autoconfigure: true
            public: false
    
        App\:
            resource: ../src
            exclude: ../src/{Entity,Migrations,Model,Resources,Tests,Widget}
        
        App\Controller\:
            resource: ../src/Controller
            public: true
    routes.yaml
    Code:
    app.controller:
        resource: ../src/Controller
        type: annotation
        
    time:
        path: /time/
        defaults:
            _controller: 'App\Controller\TimeController::trackAction'
            _scope: frontend
            _token_check: false
    
    module-track-add:
        path: /module-track-add/
        defaults:
            _controller: 'App\Controller\ModuleController::addAction'
            _scope: frontend
            _token_check: false
    
    module-track-update:
        path: /module-track-update/
        defaults:
            _controller: 'App\Controller\ModuleController::updateAction'
            _scope: frontend
            _token_check: false
    ModuleController.php
    Code:
    <?php
    	namespace App\Controller;
    
    	use Symfony\Component\HttpFoundation\Response;
    	use Symfony\Component\HttpKernel\Attribute\AsController;
    	use Symfony\Component\Routing\Annotation\Route;
    	use Symfony\Component\Security\Core\Security;
    	use Terminal42\ServiceAnnotationBundle\Annotation\ServiceTag;
    
    	class ModuleController
    	{
    		/**
    		 * @Route("/module-track-add/")
    		 */
    		
    		private $security;
    		
    		public function __construct(Security $security)
    		{
    			$this->security = $security;
    		}
    		
    		public function addAction()
    		{
    			// Get token
    			$token = $this->security->getToken();
    			
    			// Check if user is authenticated
    			if(null !== $token && $token->isAuthenticated('ROLE_MEMBER')) {
    				// Get DB Instance
    				$dataBase = \Database::getInstance();
    				
    				// Query
    				$sql = '';
    		
    				// Execute Query
    				$result = $dataBase->prepare($sql)->execute();
    
    				$objResponse = new Response($sql);
    			} else {
    				// Redirect
    				\Controller::redirect(\Controller::replaceInsertTags('{{page::language}}') . '/');
    			}
    
    			return $objResponse;
    		}
    		
    		/**
    		 * @Route("/module-track-update/")
    		 */
    		public function updateAction()
    		{
    			// Get token
    			$token = $this->security->getToken();
    			
    			// Check if user is authenticated
    			if(null !== $token && $token->isAuthenticated('ROLE_MEMBER')) {
    				// Get DB Instance
    				$dataBase = \Database::getInstance();
    				
    				// Query
    				$sql = '';
    				
    				// Execute Query
    				$result = $dataBase->prepare($sql)->execute()->fetchAllAssoc()[0];
    				
    				// Query
    				$sql = '';
    				
    				// Execute Query
    				$result = $dataBase->prepare($sql)->execute();
    				
    				$objResponse = new Response($sql);
    			} else {
    				// Redirect
    				\Controller::redirect(\Controller::replaceInsertTags('{{page::language}}') . '/');
    			}
    
    			return $objResponse;
    		}
    TimeController.php
    Code:
    <?php
    	namespace App\Controller;
    
    	use Symfony\Component\HttpFoundation\Response;
    	use Symfony\Component\HttpKernel\Attribute\AsController;
    	use Symfony\Component\Routing\Annotation\Route;
    	use Symfony\Component\Security\Core\Security;
    	use Terminal42\ServiceAnnotationBundle\Annotation\ServiceTag;
    
    	class TimeController
    	{
    		/**
    		 * @Route("/time/")
    		 */
    		
    		private $security;
    		
    		public function __construct(Security $security)
    		{
    			$this->security = $security;
    		}
    		
    		public function trackAction()
    		{
    			// Get token
    			$token = $this->security->getToken();
    			
    			// Check if user is authenticated
    			if(null !== $token && $token->isAuthenticated('ROLE_MEMBER')) {
    				// Get DB Instance
    				$dataBase = \Database::getInstance();
    				
    				// Query
    				$sql = '';
    		
    				// Execute Query
    				$result = $dataBase->prepare($sql)->execute();
    
    				$objResponse = new Response($sql);
    			} else {
    				// Redirect
    				\Controller::redirect(\Controller::replaceInsertTags('{{page::language}}') . '/');
    			}				
    
    			return $objResponse;
    		}
    	}
    Wenn ich die Route /time/ aufrufe, dann wird der Code entsprechend ausgeführt, ebenso wie die Route /module-track-add/, jedoch werden die anderen Routen aus der ModuleController.php nicht ohne Fehler ausgegeben. Folgende Fehlermeldung erscheint:
    Code:
    [2023-11-03T21:55:49.148707+01:00] request.INFO: Matched route "app_module_update". {"route":"app_module_update","route_parameters":{"_route":"app_module_update","_controller":"App\\Controller\\ModuleController::updateAction"},"request_uri":"https://.../module-track-update/","method":"POST"} []
    [2023-11-03T21:55:49.151609+01:00] request.CRITICAL: Uncaught PHP Exception Error: "Call to a member function get() on null" at /www/.../contao/vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php line 845 {"exception":"[object] (Error(code: 0): Call to a member function get() on null at /www/.../contao/vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:845)"} []
    Ich denke, dass Problem wird eher grundlegend sein, da ich mich mit der neuen Version noch nicht allzu sehr beschäftigt habe, aber vielleicht kann mir jemand den richtigen Weg aufzeigen.

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

    Standard

    In der ModuleController.php nutzt du die Database Klasse aus dem Legacy Contao Framework
    Um das in einem separaten Controller nutzen zu können, musst du entweder den _scope auf frontend setzen, oder das ContaoFramework initialisieren.

    Besser wäre jedoch du nutzt direkt Doctrine für die Datenbank Verbindung. https://docs.contao.org/dev/referenc...ase-connection

    Übrigens solltest du für die lokale Entwicklung oder zumindest für das Debugging immer den Debug-Modus aktivieren.
    » sponsor me via GitHub or PayPal or Revolut

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
  •