Contao-Camp 2024
Ergebnis 1 bis 21 von 21

Thema: Ordnerstruktur und PSR-4 Autoloading Standard

  1. #1
    Contao-Nutzer
    Registriert seit
    22.08.2019.
    Beiträge
    8

    Standard Ordnerstruktur und PSR-4 Autoloading Standard

    Hallo zusammen,

    mir ist im Contao Manager, als ich etwas an einer Erweiterung einer bestehenden Installation aktualisiert habe, aufgefallen, dass folgende Hinweise in der Konsole des Managers ausgegeben werden:
    Code:
    Deprecation Notice: Class ... located in ./src/NameBundle/Resources/contao/dca/... does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0.
    Meine Erweiterung lade ich in der composer.json über folgenden Eintrag:
    Code:
        "autoload": {
            "psr-4": {
                "": "src/"
            }
        }
    Meine Ordnerstruktur sieht aktuell so aus:

    Code:
    Wurzelverzeichnis
        app
        assets
        contao-manager
        files
        src
            NameBundle
                ContentElement
                    ...
                Resources
                    contao
                        classes
                        config
                        dca
                        forms
                        languages
                        models
                        templates
                    public
                        ...
            ContaoManagerPlugin.php
        system
        templates
        var
        vendor
        web
    Mir ist nun jedoch in den Docs dieser Artikel aufgefallen.
    Hier scheint eine Erweiterung nicht in einem eigenen Verzeichnis "src" im Wurzelverzeichnis, sondern im "app" Verzeichnis hinzugefügt zu werden?

    Daher nun meine Fragen:
    Wie genau konfiguriere ich meine Erweiterung als PSR-4 konform?
    Wie sollte oder müsste ich die Ordnerstruktur meiner Erweiterung verändern, damit auch hier alles in Ordnung ist?
    Geändert von jxns (17.06.2020 um 10:26 Uhr)

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

    Standard

    Ist das eine Erweiterung, die du in mehreren Contao Installationen einsetzt?

  3. #3
    Contao-Nutzer
    Registriert seit
    22.08.2019.
    Beiträge
    8

    Standard

    Nein, die Erweiterung wird nur in einer einzigen Installation eingesetzt.

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

    Standard

    Dann solltest du dafür kein Bundle einsetzen, sondern die Anpassungen so wie es in der Dokumentation beschrieben ist machen.

  5. #5
    Contao-Nutzer
    Registriert seit
    22.08.2019.
    Beiträge
    8

    Standard

    Also sollten meine Ordner in das Verzeichnis /app/Resources/contao?

    Hast du hier vielleicht ein Beispiel, wie genau die Ordnerstruktur dann auszusehen hätte? Die Dokumentation ist hier ja leider nicht ganz so detailliert.
    Löst dies dann auch die Problematik mit den PSR-4-Hinweisen?

  6. #6
    Contao-Nutzer
    Registriert seit
    22.08.2019.
    Beiträge
    8

    Standard

    Könnte mir hierzu jemand vielleicht noch ein paar Details geben ?

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

    Standard

    Zitat Zitat von jxns Beitrag anzeigen
    Die Dokumentation ist hier ja leider nicht ganz so detailliert.
    Was genau fehlt dir?

  8. #8
    Contao-Nutzer
    Registriert seit
    22.08.2019.
    Beiträge
    8

    Standard

    Also ich kannte für Contao 4 bisher nur den Weg als Bundle, so wie ich ihn beschrieben habe.
    Verstehe ich das jetzt richtig, dass ich, statt einem Bundle, meine Ordner aus meiner Erweiterung (classes, config, dca usw.) einfach in den Ordner "app/Resources/contao" schieben müsste und als Autoload-Configuration dann folgendes ausreicht?

    Code:
        "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        }

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

    Standard

    Zitat Zitat von jxns Beitrag anzeigen
    Verstehe ich das jetzt richtig, dass ich, statt einem Bundle, meine Ordner aus meiner Erweiterung (classes, config, dca usw.) einfach in den Ordner "app/Resources/contao" schieben müsste
    Nein, warum gehst du davon aus? Hier hast du eine Übersicht, was wohin gehört: https://docs.contao.org/dev/getting-...g-development/

    DCA Änderungen gibst du also in contao/dca/tl_xyz.php. Anpassungen von Übersetzungen machst du in contao/languages/xy/…. Programm Code gibst du in src/ in den jeweiligen Subnamespaces, je nach dem was du implementieren möchtest. Siehe dazu auch die Beispiele in der Dokumentation. Das Autoloading lässt du auf Default bzw. so wie in der Dokumentation beschrieben.

  10. #10
    Contao-Nutzer
    Registriert seit
    22.08.2019.
    Beiträge
    8

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Nein, warum gehst du davon aus? Hier hast du eine Übersicht, was wohin gehört: https://docs.contao.org/dev/getting-...g-development/
    Das habe ich weiter unten in der Dokumentation dann missverstanden.
    Wie sieht es denn mit der Struktur für die zusätzlichen Programmcodes im /src Verzeichnis aus?
    Hooks, Models, Backend Module usw. habe ich bisher in der /config/config.php registriert. Dies kommt ja scheinbar nun ins /src Verzeichnis?
    Wie würde hierfür die Struktur denn aussehen? /src/config/config.php?

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

    Standard

    Zitat Zitat von jxns Beitrag anzeigen
    Hooks, Models, Backend Module usw. habe ich bisher in der /config/config.php registriert. Dies kommt ja scheinbar nun ins /src Verzeichnis?
    Wie du bspw. Hooks registrierst, ist hier beschrieben: https://docs.contao.org/dev/framewor...istering-hooks

    Für Contao 4.9 verwendest du am besten die Annotations Variante.



    Zitat Zitat von jxns Beitrag anzeigen
    Wie würde hierfür die Struktur denn aussehen? /src/config/config.php?
    Du verwechselst hier immer noch Dinge. in src/ gibst du nur deinen Programm Code. Die Contao config.php gehört in den Ordner contao/config/. Siehe https://docs.contao.org/dev/getting-...n-translations

    Für einen Hook brauchst du das in Contao 4.9 aber nicht. Dazu musst du nur den Hook in src/ implementieren und per Annotation Taggen. In Contao 4.9 werden die Klassen im App\ Namespace (welche ja in src/ implementiert sind) automatisch als Services registriert. Siehe https://docs.contao.org/dev/getting-...es-and-actions

  12. #12
    Contao-Fan
    Registriert seit
    10.01.2010.
    Ort
    Kiel
    Beiträge
    339

    Standard

    Hallo,

    ich klinke mich mal ein.
    Ich habe eine eigene Erweiterung, die in Contao 4.4 unter "src/" liegt. Habe ich es richtig verstanden, dass es am sinnvollsten ist, wenn ich die Dateien unter Contao 4.9 sozusagen aufteile?
    - classes, controllers, models und modules bleiben unter "src/" (am besten noch den Namespace auf "App" ändern, damit alles automatisch geladen wird)
    - config, dca, languages kommen unter "contao/"
    - templates kommen unter "templates/"

    Oder gibt es eine simplere Vorgehensweise, bei der ich die Ordner nicht aufteilen und Namespaces nicht ändern muss?

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

    Standard

    Da du das Wort "Erweiterung" erwähnt hast: es kommt darauf an ob du Anpassungen nur für die eine Contao Applikation machen möchtest - oder eine Contao Erweiterung für beliebige Contao Installationen programmieren möchtest.

    Ein Überblick darüber, wie man Anpassungen an einer Contao Applikation vornimmt findest du hier: https://docs.contao.org/dev/getting-...g-development/ (und fortfolgend)

    Eine Variante, wie man die Entwicklung einer allgemeinen Contao Erweiterung starten könnte, findest du im Groben hier: https://docs.contao.org/dev/getting-started/extension/
    Geändert von Spooky (24.06.2020 um 15:10 Uhr)

  14. #14
    Contao-Fan
    Registriert seit
    10.01.2010.
    Ort
    Kiel
    Beiträge
    339

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das du das Wort "Erweiterung" erwähnt hast: es kommt darauf an ob du Anpassungen nur für die eine Contao Applikation machen möchtest - oder eine Contao Erweiterung für beliebige Contao Installationen programmieren möchtest.
    Sorry, „Erweiterung“ war in diesem Zusammenhang dann der falsche Begriff. Es geht nur um eine Contao-Installation.

    Zitat Zitat von Spooky Beitrag anzeigen
    Ein Überblick darüber, wie man Anpassungen an einer Contao Applikation vornimmt findest du hier: https://docs.contao.org/dev/getting-...g-development/ (und fortfolgend)

    Eine Variante, wie man die Entwicklung einer allgemeinen Contao Erweiterung starten könnte, findest du im Groben hier: https://docs.contao.org/dev/getting-started/extension/
    Danke, die Links kenne ich, aber ich verstehe nicht, wie ich meine bestehende Contao-4.4-Anpassung am einfachsten in eine für Contao 4.9 umwandele. Lasse ich alle Dateien im Ordner "src" oder verteile ich sie, so wie im ersten Link beschrieben?

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

    Standard

    Zitat Zitat von Tina Beitrag anzeigen
    Danke, die Links kenne ich, aber ich verstehe nicht, wie ich meine bestehende Contao-4.4-Anpassung am einfachsten in eine für Contao 4.9 umwandele. Lasse ich alle Dateien im Ordner "src" oder verteile ich sie, so wie im ersten Link beschrieben?
    Am besten "verteilen". Wenn du dich in der Materie schon besser auskennst, kannst du es auch anders machen (ein lokales Bundle registrieren), aber ansonsten würde ich vorschlagen, es so zu machen wie in der Dokumentation beschrieben.

  16. #16
    Contao-Fan
    Registriert seit
    10.01.2010.
    Ort
    Kiel
    Beiträge
    339

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Am besten "verteilen". Wenn du dich in der Materie schon besser auskennst, kannst du es auch anders machen (ein lokales Bundle registrieren), aber ansonsten würde ich vorschlagen, es so zu machen wie in der Dokumentation beschrieben.
    Ok, super, dann weiß ich, wo ich ansetzen muss. Vielen Dank!

  17. #17
    Contao-Fan Avatar von syncgw
    Registriert seit
    17.07.2012.
    Beiträge
    313

    Standard

    Hei,
    meine Extensions sind jetzt auch mit Depreceated-Meldungen beglückt worden. Also dachte ich, ich hangele mich am https://github.com/contao/skeleton-bundle lang. Aber leider gibt es da kein app Verzeichnis. Leider konnte ich auch keine Extension finden, die psr-4 mit dem app Verzeichnis schon umgesetzt hat.

    Abschließend habe ich ich versucht, den Vorschlägen von https://docs.contao.org/dev/getting-...g-development/ zu folgen. Gestartet bin ich mit: 2020-09-26 12_19_43-Eclipse 4.15 - contao_spambot_composer.json - Eclipse SDK.png. Das Ergebnis sieht dann wie folgt aus: 2020-09-26 12_15_13-Eclipse 4.15 - contao_spambot_composer.json - Eclipse SDK.png

    Ist das Richtig so?
    Oder kennt jemand eine Extension, die schon psr-4 kompatibel ist und keine Depreceated-Meldung ausgibt an die man "kopieren" kann?

    P.S. Der Vollständigkeit halber....
    Code:
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotAHBL located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\AHBL.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotBlocklist located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\Blocklist.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotBotScout located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\BotScout.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotFSpamList located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\FSpamList.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotHoneypot located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\Honeypot.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotIntern located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\Intern.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotIPStack located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\IPStack.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotNixSpam located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\NixSpam.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotSORBS located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\SORBS.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotSpamCop located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\SpamCop.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotSpamhaus located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\Spamhaus.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotStopForumSpam located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\StopForumSpam.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotUCEProtect1 located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\UCEProtect1.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotUCEProtect2 located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\UCEProtect2.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotUCEProtect3 located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\UCEProtect3.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotWPBL located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Module\engines\WPBL.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Deprecation Notice: Class syncgw\SpamBotBundle\Module\SpamBotCall located in C:/aXa/Docs/www/tst/vendor/syncgw/contao-spambot/src\Resources\public\SpamBotCall.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/aXa/Docs/www/tst/web/contao-manager.phar.php/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php:201
    Geändert von syncgw (26.09.2020 um 11:27 Uhr)
    __________________________________________
    Live long and prosper
    Florian

    Spenden GitHub

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

    Standard

    Warum app Verzeichnis? Standard wäre src.

  19. #19
    Contao-Fan Avatar von syncgw
    Registriert seit
    17.07.2012.
    Beiträge
    313

    Standard

    @spooky In der Doku ist die rede von

    Contao 4.4 still uses the Symfony 3 directory structure. The config/ folder will be in app/config/ and the contao/ folder will be in app/Resources/contao/ instead.
    Daher kam ich auf app. Im Grunde ist mir egal, wie die Verzeichnisse heißen. Ich will ja nur die Medung los werden ....
    __________________________________________
    Live long and prosper
    Florian

    Spenden GitHub

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

    Standard

    Das bezieht sich auf die Applikationsanpassungen. Und selbst innerhalb der Applikation gibst du deinen Quellcode in den src/ Ordner, nicht in den app/ Ordner.

    (Was du in deinem Bundle falsch gemach hast kann ich aktuell nicht überprüfen, da ich unterwegs bin.)

  21. #21
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Zitat Zitat von syncgw Beitrag anzeigen
    Ist das Richtig so?
    Oder kennt jemand eine Extension, die schon psr-4 kompatibel ist und keine Depreceated-Meldung ausgibt an die man "kopieren" kann?
    Kennst du markocupic/contao-bundle-creator-bundle

    Damit kannst du ein psr4 konformes contao Bundle aus dem Contao Backend generieren.

    Für mich eine sehr große Zeitersparnis, vor allem bei kleinen Extensions.

    LG Marko
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 3 (Registrierte Benutzer: 0, Gäste: 3)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •