Contao-Camp 2024
Ergebnis 1 bis 12 von 12

Thema: Eigene Route in neuer Contao 4.13 LTS Installation erstellen --> Class does not exist

  1. #1
    Contao-Nutzer
    Registriert seit
    26.03.2021.
    Beiträge
    25

    Standard Eigene Route in neuer Contao 4.13 LTS Installation erstellen --> Class does not exist

    Hallo zusammen,

    ich habe gerade eine neue Installation (mit contao-manager auf neueste LTS) erstellt.

    Mit Hilfe der Anleitung: https://docs.contao.org/dev/framework/routing/ habe ich versucht die Beispielroute zu erstellen.

    Folgendes waren meine Schritte:

    1. config/routes.yaml erstellt (mit genau dem Inhalt vom der Beispielseite)
    2. src/Controller/ExampleController.php erstellt (mit genau dem Inhalt vom der Beispielseite)
    3. Aufruf der console mit: vendor/bin/contao-console debug:router


    Jetzt erhalte ich folgenden fehler:
    Code:
      Class "App\Controller\ExampleController" does not exist in /Users/User/contao4/config/../src/Controller (which is being imported from "/Users/User/Contao4/martas-contao4/config/routes.yaml"). Make sure to use PHP 8+ or that annotations are installed and enabled.
    Ich habe die Pfade genau kontrolliert. Was kann hier falsch sein? Ich verwende PHP 8.1.1. Wie kann ich die annotations installieren/einschalten? Muss man das?
    Danke Ludi
    Geändert von lud81 (07.09.2022 um 23:00 Uhr)

  2. #2
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.060
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Sorry wenn ich das jetzt frage, du hast dem Code aus der Beispielseite schon ein <?php vorangestellt? Ich frage das nur, weil du nicht der Erste wärst, der darüber stolpert.

  3. #3
    Contao-Nutzer
    Registriert seit
    26.03.2021.
    Beiträge
    25

    Standard

    Zitat Zitat von tab Beitrag anzeigen
    Sorry wenn ich das jetzt frage, du hast dem Code aus der Beispielseite schon ein <?php vorangestellt? Ich frage das nur, weil du nicht der Erste wärst, der darüber stolpert.
    Ja ich habe bei der ExampleController.php Datei vorher <?php eingefügt.


    Code:
    <?php
    
    // src/Controller/ExampleController.php
    namespace App\Controller;
    
    use Symfony\Component\HttpFoundation\JsonResponse;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
    
    /**
     * @Route("/example", name=ExampleController::class)
     */
    class ExampleController
    {
        public function __invoke(Request $request): Response
        {
            return new Response('Hello World!');
        }
    }

    bei der routes.yaml Datei habe ich genau der Inhalt verwendet:
    Code:
    # config/routes.yaml
    app.controller:
        resource: ../src/Controller
        type: annotation
    wenn ich die Datei ExampleController.php lösche funktioniert der Befehl vendor/bin/contao-console debug:router

    Also er muss mal die Datei ExampleController.php finden.

    Muss ich in der composer.json noch "autoload" konfigurieren?

  4. #4
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.060
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Anwendungscache auch neu aufgebaut? Das muss man nach meinem Verständnis (ich bin kein PHP-Entwickler, ich versuche nur, hier im Forum entsprechende Threads zumindest querzulesen, damit ich im Ernstfall mich daran erinnere, dass da mal irgendwas war und somit danach suchen kann ) immer machen, wenn irgendwelche Konfigurationsdateien geändert oder angelegt werden. Beim ClassLoader und Opcode Cache bin ich mir nicht sicher. Im Zweifelsfall würde ich es erst ohne probieren, schon um das herauszufinden. Wenn es so aber nicht funktioniert, dann würde ich es halt machen, dauert ja auch nicht ewig. Wenn es dann immer noch nicht geht, dann fällt mir erst mal auch nichts mehr ein.

  5. #5
    Contao-Nutzer
    Registriert seit
    26.03.2021.
    Beiträge
    25

    Standard

    Zitat Zitat von tab Beitrag anzeigen
    Anwendungscache auch neu aufgebaut? Das muss man nach meinem Verständnis (ich bin kein PHP-Entwickler, ich versuche nur, hier im Forum entsprechende Threads zumindest querzulesen, damit ich im Ernstfall mich daran erinnere, dass da mal irgendwas war und somit danach suchen kann ) immer machen, wenn irgendwelche Konfigurationsdateien geändert oder angelegt werden. Beim ClassLoader und Opcode Cache bin ich mir nicht sicher. Im Zweifelsfall würde ich es erst ohne probieren, schon um das herauszufinden. Wenn es so aber nicht funktioniert, dann würde ich es halt machen, dauert ja auch nicht ewig. Wenn es dann immer noch nicht geht, dann fällt mir erst mal auch nichts mehr ein.

    also ich habe alles mal versucht
    - vendor/bin/contao-console cache:clear
    - im contao-manager alle caches gelöscht
    - im contao-manager dump autoloader
    - und ich habe beides im dev und im prod Mode probiert

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

    Standard

    Also bei mir funktioniert es in Contao 4.13. Ich habe

    1. die Datei config/routes.yaml angelegt und das Beispiel aus der Dokumentation hinein kopiert
    2. die Datei src/Controller/ExampleController.php angelegt und das Beispiel aus der Dokumentation hinein kopiert
    3. composer install aufgerufen
    4. vendor/bin/contao-console debug:router "App\Controller\ExampleController" aufgerufen (funktioniert)
    5. https://example.com/example aufgerufen (funktioniert)
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    26.03.2021.
    Beiträge
    25

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Also bei mir funktioniert es in Contao 4.13. Ich habe

    1. die Datei config/routes.yaml angelegt und das Beispiel aus der Dokumentation hinein kopiert
    2. die Datei src/Controller/ExampleController.php angelegt und das Beispiel aus der Dokumentation hinein kopiert
    3. composer install aufgerufen
    4. vendor/bin/contao-console debug:router "App\Controller\ExampleController" aufgerufen (funktioniert)
    5. https://example.com/example aufgerufen (funktioniert)
    Hallo,

    jetzt habe ich es noch einmal gemacht und jetzt funktioniert es. das ist ja komisch. Ich werde beide projekte noch vergleichen und genau schauen was hier der unterschied ist.

  8. #8
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.684
    User beschenken
    Wunschliste

    Standard

    ggf. fehlte Punkt 3: composer install

  9. #9
    Contao-Nutzer
    Registriert seit
    02.04.2021.
    Beiträge
    68

    Standard

    @lud81
    Hast du herausgefunden was bei dir das Problem war? Stecke selber hier fest und composer install wirft mir schon den Fehler das der Controller nicht gefunden werden kann.

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

    Standard

    Zitat Zitat von mikefmmedia Beitrag anzeigen
    @lud81
    Hast du herausgefunden was bei dir das Problem war? Stecke selber hier fest und composer install wirft mir schon den Fehler das der Controller nicht gefunden werden kann.
    Poste den Fehler und deinen Code inkl. Pfadangaben.
    » sponsor me via GitHub or PayPal or Revolut

  11. #11
    Contao-Nutzer
    Registriert seit
    07.11.2019.
    Ort
    Münster
    Beiträge
    33

    Frage

    Ich klinke mich hier mal ein, da ich das gleiche Problem habe, nur in einem Bundle. Contao scheint meinen Controller nicht zu finden, oder zu ignorieren.
    Im Unterschied zum Vorherigen kommt bei mir aber (leider) noch PHP 7.4 zum Einsatz.
    Mein Code:

    src/ContaoManager/Plugin.php
    PHP-Code:
    <?php

    namespace MyVendor\Jobfeed\ContaoManager;

    use 
    Contao\CoreBundle\ContaoCoreBundle;
    use 
    Contao\ManagerPlugin\Bundle\BundlePluginInterface;
    use 
    Contao\ManagerPlugin\Bundle\Config\BundleConfig;
    use 
    Contao\ManagerPlugin\Bundle\Parser\ParserInterface;
    use 
    MyVendor\Jobfeed\JobfeedBundle;

    class 
    Plugin implements BundlePluginInterface {
        public function 
    getBundles(ParserInterface $parser): array
        {
            return [
                
    BundleConfig::create(JobfeedBundle::class)
                    ->
    setLoadAfter([ContaoCoreBundle::class]),
            ];
        }
        public function 
    getRouteCollection(LoaderResolverInterface $resolverKernelInterface $kernel)
        {
            
    $file __DIR__.'/../Resources/config/routes.yml';
            return 
    $resolver->resolve($file)->load($file);
        }
    }
    src/Controller/JobfeedController.php
    PHP-Code:
    <?php

    namespace MyVendor\Jobfeed\Controller;

    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;
    use 
    Symfony\Component\Routing\Annotation\Route;

    /**
     * @Route("/example")
     */
    class JobfeedController {
        public function 
    __invoke(Request $request): Response {
            return new 
    Response('Hello World');
        }
    }
    src/DependencyInjection/JobfeedExtension.php
    PHP-Code:
    <?php

    namespace MyVendor\Jobfeed\DependencyInjection;

    use 
    Symfony\Component\Config\FileLocator;
    use 
    Symfony\Component\DependencyInjection\ContainerBuilder;
    use 
    Symfony\Component\DependencyInjection\Extension\Extension;
    use 
    Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

    class 
    JobfeedExtension extends Extension {
        public function 
    load(array $configsContainerBuilder $container): void
        
    {
            
    $loader = new YamlFileLoader($container, new FileLocator(__DIR__ '/../Resources/config'));
            
    $loader->load('services.yml');
        }
    }
    src/Resources/config/routes.yml
    Code:
    myvendor.jobfeed.controller:
        resource: ../../Controller
        type: annotation
    src/Resources/config/services.yml
    Code:
    services:
        _defaults:
            autoconfigure: true
    src/JobfeedBundle.php
    PHP-Code:
    <?php

    namespace MyVendor\Jobfeed;

    use 
    Symfony\Component\HttpKernel\Bundle\Bundle;

    class 
    JobfeedBundle extends Bundle{}
    composer.json
    Code:
    {
    	"name": "myvendor/jobfeed",
    	"description": "XML Jobfeed 3",
    	"type": "contao-bundle",
    	"require": {
    		"contao/core-bundle": "^4.13"
    	},
    	"autoload": {
    		"psr-4": {
    			"MyVendor\\Jobfeed\\": "src/"
    		}
    	},
    	"conflict": {
    		"contao/manager-plugin": "<2.0 || >=3.0"
    	},
    	"require-dev": {
    		"contao/manager-plugin": "^2.0"
    	},
    	"extra": {
    		"contao-manager-plugin": "MyVendor\\Jobfeed\\ContaoManager\\Plugin"
    	}
    }
    Output von
    Code:
    vendor/bin/contao-console debug:router 'MyVendor\Jobfeed\Controller\JobfeedController
    Code:
    17:18:11 CRITICAL  [console] Error thrown while running command "debug:router 'MyVendor\Jobfeed\Controller\JobfeedController'". Message: "The route "MyVendor\Jobfeed\Controller\JobfeedController" does not exist." ["exception" => Sym
    fony\Component\Console\Exception\InvalidArgumentException^ { …},"command" => "debug:router 'MyVendor\Jobfeed\Controller\JobfeedController'","message" => "The route "MyVendor\Jobfeed\Controller\JobfeedController" does not exist."]   
    
    
      The route "MyVendor\Jobfeed\Controller\JobfeedController" does not exist.  
    
    
    debug:router [--show-controllers] [--format FORMAT] [--raw] [--] [<name>]
    Und bei Aufruf von /example bekomme ich die 404 Seite.. Was mache ich falsch?

    Ich bin über jeden Hinweis dankbar!

    VG
    Kyuhunter
    Geändert von Kyuhunter (21.06.2023 um 17:30 Uhr)

  12. #12
    Contao-Nutzer
    Registriert seit
    26.03.2021.
    Beiträge
    25

    Standard

    Zitat Zitat von mikefmmedia Beitrag anzeigen
    @lud81
    Hast du herausgefunden was bei dir das Problem war? Stecke selber hier fest und composer install wirft mir schon den Fehler das der Controller nicht gefunden werden kann.
    Hallo,

    ich bin mir nicht mehr ganz sicher. Ich kann mich aber auch daran erinnern, dass ich auch den composer upgedated habe und noch einmal composer install aufgerufen habe.

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
  •