Ergebnis 1 bis 15 von 15

Thema: Frontendmodul-Registrierung per Annotation klappt nicht

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

    Standard Frontendmodul-Registrierung per Annotation klappt nicht

    Bitte um eure Hilfe bei folgendem Problem:

    Wenn ich die Frontendmodul-Registrierung per Annotation auf diesem Weg versuche:

    PHP-Code:
    // src/Controller/FrontendModule/ExampleModuleController.php

    namespace App\Controller\FrontendModule;

    use 
    Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
    use 
    Contao\CoreBundle\ServiceAnnotation\FrontendModule;
    use 
    Contao\ModuleModel;
    use 
    Contao\Template;
    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;

    /**
     * @FrontendModule("example", category="miscellaneous", template="mod_example", renderer="forward", method="__invoke")
     */
    class ExampleModuleController extends AbstractFrontendModuleController
    {
        protected function 
    getResponse(Template $templateModuleModel $modelRequest $request): Response
        
    {
            return 
    $template->getResponse();
        }

    ... klappt es.
    D.h. das Modul "example" scheint im Backend auf.

    Wenn ich das Ganze jedoch in meiner eigenen Erweiterung umsetzen möchte – d.h. zb. so:
    PHP-Code:
    // vendor/georgpreissl/contao-jobs-bundle/src/Controller/FrontendModule/ExampleModuleController.php

    namespace GeorgPreissl\Jobs\Controller\FrontendModule;

    use 
    Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
    use 
    Contao\CoreBundle\ServiceAnnotation\FrontendModule;
    use 
    Contao\ModuleModel;
    use 
    Contao\Template;
    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;

    /**
     * @FrontendModule("example", category="miscellaneous", template="mod_example", renderer="forward", method="__invoke")
     */
    class ExampleModuleController extends AbstractFrontendModuleController
    {
        protected function 
    getResponse(Template $templateModuleModel $modelRequest $request): Response
        
    {
            return 
    $template->getResponse();
        }

    ... klappt es nicht.
    Das Modul scheint im Backend nicht auf.

    Muss ich eine services.yml erstellen und laden?

    Danke im Voraus für eure Hilfe!

  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

    Zitat Zitat von thesweetg Beitrag anzeigen
    Muss ich eine services.yml erstellen und laden?
    Ja - siehe z.B. die Schnellanleitung in der Dokumentation: https://docs.contao.org/dev/getting-...-configuration
    » sponsor me via GitHub or PayPal or Revolut

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

    Standard

    Ok, danke, ich hab jetzt die Datei angelegt:

    PHP-Code:
    // vendor/georgpreissl/contao-jobs-bundle/src/DependencyInjection/GeorgPreisslJobs.php

    <?php

    namespace GeorgPreissl\Jobs\DependencyInjection;

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

    class 
    GeorgPreisslJobs extends Extension
    {
        public function 
    load(array $configsContainerBuilder $container): void
        
    {
            
    $loader = new YamlFileLoader($container, new FileLocator(__DIR__ '/../Resources/config'));
            
    $loader->load('services.yaml');
        }
    }

    ... und die hier:
    PHP-Code:
    // vendor/georgpreissl/contao-jobs-bundle/src/Resources/config/services.yaml

    services:
        
    _defaults:
            
    autoconfiguretrue 
    ... trotzdem will es nicht klappen

    Muss ich beim Klassen-Namen der dependency injection ein "extension" anhängen?

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

    Standard

    Zitat Zitat von thesweetg Beitrag anzeigen
    ... und die hier:
    PHP-Code:
    // vendor/georgpreissl/contao-jobs-bundle/src/Resources/config/services.yaml

    services:
        
    _defaults:
            
    autoconfiguretrue 
    ... trotzdem will es nicht klappen
    Du hast in deiner services.yaml keinerlei Services registriert, daher kann ja auch noch nichts klappen
    » sponsor me via GitHub or PayPal or Revolut

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

    Standard

    Sollte das dann so aussehen?

    PHP-Code:
    services:
        
    _defaults:
            
    autoconfiguretrue
        GeorgPreissl
    \Jobs\:
            
    resource: ../../../src/* 

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

    Standard

    So kannst du alle Klassen eines Namespaces automatisch als Service registrieren, das wäre eine Möglichkeit, ja. Die Pfadangabe stimmt aber vermutlich nicht.
    » sponsor me via GitHub or PayPal or Revolut

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

    Standard

    Die services.yaml liegt hier:
    vendor/georgpreissl/contao-jobs-bundle/src/Resources/config/services.yaml

    Die ExampleModuleController.php liegt hier:
    vendor/georgpreissl/contao-jobs-bundle/src/Controller/FrontendModule/ExampleModuleController.php

    Somit müsste der Pfad:
    ../../../src/*
    ... doch stimmen, oder?

    Oder muss es:
    ../../../src/Controller/FrontendModule/ExampleModuleController
    ... sein?


    Oder ist das (wenn ich nur das eine FrontenModul will) der richtige Ansatz:
    PHP-Code:
    services:
        
    _defaults:
            
    autoconfiguretrue
        GeorgPreissl
    \Jobs\Controller\FrontendModule\ExampleModuleController:
            class: 
    GeorgPreissl\Jobs\Controller\FrontendModule\ExampleModuleController 


    Ich hab von Services etc. leider wenig Ahnung wie man merkt

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

    Standard

    Zitat Zitat von thesweetg Beitrag anzeigen
    Die services.yaml liegt hier:
    vendor/georgpreissl/contao-jobs-bundle/src/Resources/config/services.yaml

    Die ExampleModuleController.php liegt hier:
    vendor/georgpreissl/contao-jobs-bundle/src/Controller/FrontendModule/ExampleModuleController.php

    Somit müsste der Pfad:
    ../../../src/*
    ... doch stimmen, oder?

    Oder muss es:
    ../../../src/Controller/FrontendModule/ExampleModuleController
    ... sein?
    Ich meinte den * am Schluss. ../../ reicht in deinem Fall übrigens auch (deine config.yaml liegt in deinem Fall ja schon innerhalb von src/, weil du noch die veraltete Ordnerstruktur nutzt).


    Zitat Zitat von thesweetg Beitrag anzeigen
    Oder ist das (wenn ich nur das eine FrontenModul will) der richtige Ansatz:
    PHP-Code:
    services:
        
    _defaults:
            
    autoconfiguretrue
        GeorgPreissl
    \Jobs\Controller\FrontendModule\ExampleModuleController:
            class: 
    GeorgPreissl\Jobs\Controller\FrontendModule\ExampleModuleController 
    Ja, so registrierst du einen einzelnen Service manuell. Das class: brauchst du dann aber nicht, wenn du als Service Namen ohnehin schon den FQCN der Klasse nimmst.


    Zitat Zitat von thesweetg Beitrag anzeigen
    Ich hab von Services etc. leider wenig Ahnung wie man merkt
    Kannst du ja über die Symfony Dokumentation erlernen.
    » sponsor me via GitHub or PayPal or Revolut

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

    Standard

    Es funktioniert weder:
    PHP-Code:
    services:
        
    _defaults:
            
    autoconfiguretrue
        GeorgPreissl
    \Jobs\:
            
    resource: ../../../ 
    ... noch:
    PHP-Code:
    services:
        
    _defaults:
            
    autoconfiguretrue
        GeorgPreissl
    \Jobs\:
            
    resource: ../../ 
    ... auch:
    PHP-Code:
    services:
        
    _defaults:
            
    autoconfiguretrue
        GeorgPreissl
    \Jobs\Controller\FrontendModule\ExampleModuleController 
    ... klappt nicht.

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

    Standard

    Remote Debugging über das Forum ist natürlich sehr limitiert.
    » sponsor me via GitHub or PayPal or Revolut

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

    Standard

    Danke trotzdem Spooky für deine Hilfe!

    Ich hab das Bundle in ein Repo geladen:
    https://github.com/georgpreissl/contao-jobs-bundle/

    Ich nehmen an, in einer dieser drei Dateien:
    • src/Controller/FrontendModule/ExampleModuleController.php
    • src/DependencyInjection/GeorgPreisslJobs.php
    • src/Resources/config/services.yaml


    ... muss irgendwo der Fehler liegen.

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107
    » sponsor me via GitHub or PayPal or Revolut

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107
    » sponsor me via GitHub or PayPal or Revolut

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

    Standard

    Danke! Halleluja! Das wars

    (Ich dachte man muss "Extension" nur anfügen/ersetzen wenn ein "Bundle" im Namen steckt.)

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

    Standard

    Für alle die ähnliche Probleme haben, hier nun meine Lösung zusammengefasst:

    Frontendmodul-Registrierung per Annotation unter Contoa 4.13

    Datei #1:
    Der Controller


    PHP-Code:
    // vendor/yourvendorname/contao-example-bundle/src/Controller/FrontendModule/ExampleModuleController.php

    namespace YourVendorName\ContaoExampleBundle\Controller\FrontendModule;

    use 
    Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
    use 
    Contao\CoreBundle\ServiceAnnotation\FrontendModule;
    use 
    Contao\ModuleModel;
    use 
    Contao\Template;
    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;

    /**
     * @FrontendModule("example", category="miscellaneous")
     */
    class ExampleModuleController extends AbstractFrontendModuleController
    {
        protected function 
    getResponse(Template $templateModuleModel $modelRequest $request): Response
        
    {
            return 
    $template->getResponse();
        }


    Datei #2
    DependencyInjection


    PHP-Code:
    // vendor/yourvendorname/contao-example-bundle/src/DependencyInjection/ContaoExampleExtension.php

    namespace YourVendorName\ContaoExampleBundle\DependencyInjection;

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

    class 
    ContaoExampleExtension extends Extension
    {
        public function 
    load(array $configsContainerBuilder $container): void
        
    {
            
    $loader = new YamlFileLoader($container, new FileLocator(__DIR__ '/../Resources/config'));
            
    $loader->load('services.yaml');
        }


    Datei #3
    services.yaml


    PHP-Code:
    services:
        
    _defaults:
            
    autowiretrue
            autoconfigure
    true
        YourVendorName
    \ContaoExampleBundle\Controller\FrontendModule\ExampleModuleController


    ... so hat's bei mir zumindest geklappt.

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
  •