Contao-Camp 2024
Ergebnis 1 bis 20 von 20

Thema: Cannot declare class ContaoManagerPlugin, because the name is already in use

  1. #1
    Contao-Nutzer Avatar von theMatrix
    Registriert seit
    19.09.2013.
    Ort
    Frankfurt
    Beiträge
    154

    Frage Cannot declare class ContaoManagerPlugin, because the name is already in use

    Hallo Leute,

    ich stehe vor dieser Problem und komme nicht mehr weiter:

    PHP-Code:
    Generating autoload files
    ocramius
    /package-versionsGenerating version class...
    ocramius/package-versions: ...done generating version class
    contao/manager-pluginGenerating plugin class...
    contao/manager-plugin: ...done generating plugin class
    Contao\ManagerBundle\Composer\ScriptHandler::initializeApplication

    Fatal error
    Cannot declare class ContaoManagerPluginbecause the name is already in use in /Applications/mampstack/apache2/htdocs/mytheme/src/ContaoManager/ContaoManagerPlugin.php on line 27
    PHP Fatal error
    :  Cannot declare class ContaoManagerPluginbecause the name is already in use in /Applications/mampstack/apache2/htdocs/mytheme/src/ContaoManager/ContaoManagerPlugin.php on line 27
    Script Contao
    \ManagerBundle\Composer\ScriptHandler::initializeApplication handling the post-install-cmd event terminated with an exception

    In ScriptHandler
    .php line 89:
                                                                                        
    An error occurred while executing the "contao:install-web-dir" commandPHP Fatal error:  Cannot declare class ContaoManagerPluginbecause the name is already in use in /Applications/mampstack/apache2/htdocs/mytheme/src/ContaoManager/ContaoManagerPlugin.php on line 27 
    Es handelt sich um einen lokalen installation.
    Vorher war 4.8.x und habe es auf 4.9 aktualisiert.
    Habe einige eigene Erweiterungen die ich über src/ContaoManager/ContaoManagerPlugin.php nach folgendem Muster hinzufüge:

    PHP-Code:
    use namespace\myBundle\namespaceMyBundle;


    class 
    ContaoManagerPlugin implements BundlePluginInterface
    {
        public function 
    getBundles(ParserInterface $parser)
        {
            return [

                
    BundleConfig::create(namespaceMyBundle::class)
                    ->
    setLoadAfter([ContaoCoreBundle::class]),
                
    BundleConfig::create(namespaceMyBundle::class)
                    ->
    setLoadAfter([ContaoCoreBundle::class]),
                ...
            ];
        }

    Composer.json schaut so aus:

    PHP-Code:
    {
        
    "name""contao/managed-edition",
        
    "type""project",
        
    "description""Contao Open Source CMS",
        
    "license""LGPL-3.0-or-later",
        
    "authors": [
            {
                
    "name""Leo Feyer",
                
    "homepage""https://github.com/leofeyer"
            
    }
        ],
        
    "require": {
            
    "php""^7.1",
            
    "cocur/slugify""^3.2",
            
    "contao/calendar-bundle""^4.9",
            
    "contao/comments-bundle""^4.9",
            
    "contao/conflicts""@dev",
            
    "contao/faq-bundle""^4.9",
            
    "contao/listing-bundle""^4.9",
            
    "contao/manager-bundle""4.9.*",
            
    "contao/news-bundle""^4.9",
            
    "contao/newsletter-bundle""^4.9",
            ...
            
    "madeyourday/contao-rocksolid-icon-picker""^2.0",
            
    "menatwork/contao-multicolumnwizard-bundle""^3.4",
            
    "netzmacht/contao-leaflet-maps""^3.1",
            
    "symfony/intl""^4.3",
            
    "terminal42/contao-changelanguage""^3.1"
        
    },
        
    "require-dev": {
            
    "symfony/stopwatch""^4.4"
        
    },
        
    "conflict": {
            
    "contao-components/installer""<1.3"
        
    },
        
    "extra": {
            
    "contao-component-dir""assets",
            
    "symfony": {
                
    "require""^4.2"
            
    }
        },
        
    "scripts": {
            
    "post-install-cmd": [
                
    "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            
    ],
            
    "post-update-cmd": [
                
    "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            
    ]
        },
        
    "autoload": {
            
    "classmap": [
                
    "src/ContaoManager/ContaoManagerPlugin.php",
                
    "src/namespace/myBundle"
            
    ],
            
    "psr-4": {
                
    "App\\""src/"
            
    },
            
    "exclude-from-classmap": [
            ]
        }

    Werden die Erweiterungen in Contao 4.9 anders eingebunden oder habe ich bei der Update was vergessen?

    Vielen Dank im Voraus.
    Geändert von theMatrix (13.05.2020 um 10:48 Uhr)

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

    Standard

    Dein Autoloading stimmt nicht. Du verwendest im selben Pfad deines PSR-4 Autoloadings auch nochmals zusätzlich eine Classmap. Außerdem stimmt der im Autoloading angegebene Root Namespace nicht mit dem überein, was in den PHP Dateien steht.

    // achso, das ist ja gar kein Paket, sondern deine Applikation. Du willst also Bundles installieren, die du in src/ abgelegt hast?

  3. #3
    Contao-Nutzer Avatar von theMatrix
    Registriert seit
    19.09.2013.
    Ort
    Frankfurt
    Beiträge
    154

    Standard

    Eigentlich in Contao 4.4 bis 4.8 hat es einwandfrei funktioniert gehabt. Nach der Aktualisierung auf Contao 4.9 ist es passiert.

    Wie müssen denn die Pfade aussehen?

    achso, das ist ja gar kein Paket, sondern deine Applikation. Du willst also Bundles installieren, die du in src/ abgelegt hast?
    Ja, das sind meine eigene Applikationen die ich immer wieder aktualisiere und auf git pushe. Bei einer normalen Webseite werden die Apps direkt über root/composer eingebunden.

  4. #4
    Contao-Nutzer Avatar von theMatrix
    Registriert seit
    19.09.2013.
    Ort
    Frankfurt
    Beiträge
    154

    Frage

    Ich habe jetzt eine Clean Installation von Contao 4.9 durchgeführt und habe die Apps erneut eingebunden.

    Die Klasse ContaoManagerPlugin umbenannt auf CustomContaoManagerPlugin. Somit konnte ich das Problem beheben.

    Aber dann tritt das zweite Problem auf:

    PHP-Code:
    Compile ErrorCannot declare class namespace\MyBundle\Tools\Helperbecause the name is already in use 
    Ich habe in der Klasse einfach ein dump(time()); gesetzt und wenn ich über die Konsole das clear cache für dev ausführe wird die Klasse zweimal eingebunden.
    PHP-Code:
    1589360914
    1589360914
    PHP Fatal error
    :  Cannot declare class namespace\MyBundle\Tools\Helperbecause the name is already in use 
    Wenn ich die eigene Apps aus der Autoload und CustomContaoManagerPlugin rausnehme, werden die Klassen trotzdem weiterhin eingebunden.

    Warum wird die Klasse 2x eingebunden oder überhaupt eingebunden wenn sie rausgenommen wird und wo kann es passieren?

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

    Standard

    Poste den Code deines Bundles.

  6. #6
    Contao-Nutzer Avatar von theMatrix
    Registriert seit
    19.09.2013.
    Ort
    Frankfurt
    Beiträge
    154

    Standard

    Möchtest du gesamte also alle Dateien oder eine bestimmte Datei?

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

    Standard

    Ich denke du solltest dein Setup generell umbauen. Da du sowieso einzelne Bundles hast, solltest du diese ganz normal in deiner root composer.json installieren lassen - und die Bundles registrierst du ganz normal mit je einem Contao Manager Plugin im jeweiligen Bundle. Das "globale" Manager Plugin entfernst du (auch aus dem autoloading der root composer.json).

  8. #8
    Contao-Nutzer Avatar von theMatrix
    Registriert seit
    19.09.2013.
    Ort
    Frankfurt
    Beiträge
    154

    Standard

    Ich denke du solltest dein Setup generell umbauen. Da du sowieso einzelne Bundles hast, solltest du diese ganz normal in deiner root composer.json installieren lassen - und die Bundles registrierst du ganz normal mit je einem Contao Manager Plugin im jeweiligen Bundle. Das "globale" Manager Plugin entfernst du (auch aus dem autoloading der root composer.json).
    Verstehe ich es richtig?

    • die Bundles über Root composer.json installieren (Meinst du über autoloading oder über require installieren? PS: Die Bundles sind für die Entwicklung da und nicht für die produktive Einsatz)
    • src/ContaoManager/ entfernen (ok)
    • src/ContaoManager/ aus dem root composer.json autoload:{"classmap": entfernen (ok)


    Root composer.json beinhaltet ja bereits die Pfade innerhalb der autoloading
    Und die Pakete haben auch eigene Klasse class ContaoManagerPlugin implements BundlePluginInterface

    Frage: Wie soll dann der autoloader wissen, dass die Bundles aus SRC-Verzeichnis geladen werden soll, wenn ContaoManagerPlugin nicht mehr aufgerufen wird. Oder werden die ContaoManagerPlugin von den Bundles in SRC-Verzeichnis automatisch geladen?

    PS: Die Installation ist localhost und die Bundles sind für Development gedacht. Wenn ich die Bundles für produktive Einsatz über composer require installiere habe ich keine Probleme.
    Geändert von theMatrix (13.05.2020 um 13:30 Uhr)

  9. #9
    Contao-Nutzer Avatar von theMatrix
    Registriert seit
    19.09.2013.
    Ort
    Frankfurt
    Beiträge
    154

    Standard

    Also nochmal um es verständliche auszudrücken.

    Ich habe eigene Bundles unter Root/src, die ich immer weiter entwickle und sie ab und an auf git commite

    Wenn ich die Bundles für eine produktive Einsatz über composer require installiere, funktioniert alles einwandfrei.

    Am Anfang hatte ich den Fehler, dass die Klasse ContaoManagerPlugin bereits existiert
    PHP-Code:
    Fatal errorCannot declare class ContaoManagerPluginbecause the name is already in use 
    Diese habe ich umbenannt auf CustomContaoManagerPlugin und war das Problem weg.
    Jetzt habe ich das Problem mit eigene Bundles, obwohl diese unter C4.4, 4.6 und 4.8 einwandfrei funktioniert haben. Nach der Update auf Contao 4.9 trat das Problem mit dem autoload.

    Fehler bei der autoloading:
    PHP-Code:
    Compile ErrorCannot declare class namespace\MyBundle\Tools\Helperbecause the name is already in use 
    Entferne ich den namespace\MyBundle aus der CustomContaoManagerPlugin.php wird aber trotzdem geladen. ???

    Mein ComposerPlugin in SRC-Verzeichnis:
    PHP-Code:
    use namespace\myBundle\namespaceMyBundle;


    class 
    CustomContaoManagerPlugin implements BundlePluginInterface
    {
        public function 
    getBundles(ParserInterface $parser)
        {
            return [

                
    BundleConfig::create(namespaceMyBundle::class)
                    ->
    setLoadAfter([ContaoCoreBundle::class]),
                
    BundleConfig::create(namespaceMyBundle2::class)
                    ->
    setLoadAfter([ContaoCoreBundle::class]),
                ...
            ];
        }

    Root composer.json:
    PHP-Code:
    {
        
    "name""contao/managed-edition",
        
    "type""project",
        
    "description""Contao Open Source CMS",
        
    "license""LGPL-3.0-or-later",
        
    "authors": [
            {
                
    "name""Leo Feyer",
                
    "homepage""https://github.com/leofeyer"
            
    }
        ],
        
    "require": {
            
    "php""^7.1",
            
    "cocur/slugify""^3.2",
            
    "contao/calendar-bundle""^4.9",
            
    "contao/comments-bundle""^4.9",
            
    "contao/conflicts""@dev",
            
    "contao/faq-bundle""^4.9",
            
    "contao/listing-bundle""^4.9",
            
    "contao/manager-bundle""4.9.*",
            
    "contao/news-bundle""^4.9",
            
    "contao/newsletter-bundle""^4.9",
            ...
            
    "madeyourday/contao-rocksolid-icon-picker""^2.0",
            
    "menatwork/contao-multicolumnwizard-bundle""^3.4",
            
    "netzmacht/contao-leaflet-maps""^3.1",
            
    "symfony/intl""^4.3",
            
    "terminal42/contao-changelanguage""^3.1"
        
    },
        
    "require-dev": {
            
    "symfony/stopwatch""^4.4"
        
    },
        
    "conflict": {
            
    "contao-components/installer""<1.3"
        
    },
        
    "extra": {
            
    "contao-component-dir""assets",
            
    "symfony": {
                
    "require""^4.2"
            
    }
        },
        
    "scripts": {
            
    "post-install-cmd": [
                
    "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            
    ],
            
    "post-update-cmd": [
                
    "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            
    ]
        },
        
    "autoload": {
            
    "classmap": [
                
    "src/ContaoManager/CustomContaoManagerPlugin.php",
                
    "src/namespace/myBundle",
                
    "src/namespace/myBundle2"
            
    ],
            
    "psr-4": {
                
    "App\\""src/"
            
    },
            
    "exclude-from-classmap": [
            ]
        }


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

    Standard

    Zitat Zitat von theMatrix Beitrag anzeigen
    Meinst du über autoloading oder über require installieren?
    Require.

  11. #11
    Contao-Nutzer Avatar von theMatrix
    Registriert seit
    19.09.2013.
    Ort
    Frankfurt
    Beiträge
    154

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Require.
    Wie gesagt über require funktioniert es, weil ich die Bundles aus der Git hole.

    Aber ich brauche die Bundles lokal in src um sie weiter zu entwickeln.

    Es ist mir ein Rätsel, warum die Bundles geladen werden, auch wenn ich sie aus der autoload und Manager Plugin entferne.

    Die müssen noch irgendwo gecache sein oder werden sie noch über woanders geladen.

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

    Standard

    Zitat Zitat von theMatrix Beitrag anzeigen
    Wie gesagt über require funktioniert es, weil ich die Bundles aus der Git hole.

    Aber ich brauche die Bundles lokal in src um sie weiter zu entwickeln.
    Ich verstehe leider nicht wie du das meinst.

    Nochmal: installiere die Bundles einfach ganz normal. Es spielt keine Rolle, ob du sie entwickeln willst, oder nicht. In beiden Fällen kannst du sie ganz normal installieren lassen.

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

    Standard

    Beispiel 1: angenommen du hast ein öffentlich verfügbares Paket unter https://github.com/vendor/my-package und das Paket ist auf dem öffentlichen Packagist registriert. Wenn du nun in deiner root composer.json
    Code:
    "vendor/my-package": "dev-master"
    requirest, wird der Master Branch ausgecheckt und du kannst Änderungen wieder comitten und pushen.

    Beispiel 2: angeommen, du hast ein nicht öffentlich verfügbares Paket unter https://gitlab.com/vendor/my-package. Du kannst das Paket als Repository mit der SSH URL des Repisotires in deiner root composer.json registrieren
    Code:
    {
        "type": "vcs",
        "url": "git@gitlab.com:vendor/my-package.git
    }
    und dann auch wiederum mit
    Code:
    "vendor/my-package": "dev-master"
    den master Branch auschecken lassen, wo du dann Änderungen wieder comitten und pushen kannst.

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

    Standard

    Du kannst in der root composer.json deiner Entwicklungsumgebung auch generell definieren, dass für bestimmte Pakete immer der Source ausgecheckt werden soll: https://getcomposer.org/doc/06-confi...ferred-install

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

    Standard

    Beispiel 3: deine Bundles liegen ausgecheckt bereits irgendwo in deinem lokalen Filesystem, kann auch ein Unterordner innerhalb der Contao Installation sein. Dann kannst du das Bundle auch so als Repository registrieren:
    Code:
    {
        "type": "path",
        "url": "/path/to/my/package"
    }
    und auch wiederum mit dev-master installieren lassen:
    Code:
    "vendor/my-package": "dev-master"

  16. #16
    Contao-Nutzer Avatar von theMatrix
    Registriert seit
    19.09.2013.
    Ort
    Frankfurt
    Beiträge
    154

    Frage Wie ist es dann bei der Aktualisierung der Bundles über composer update?

    OK. Dann habe ich dich richtig verstanden. Sorry für die Umstände.

    Ich dachte der normale Weg eigene Bundles zu entwickeln wäre root/src/ geeignet und nicht der root/vendor/

    Angenommen ich installiere die Bundles über require und setze mein repository path auf root/vendor/myNamespace/myBundle/...
    Setze meine Änderungen um und commite es auf git.

    eine letzte Frage (hoffe ich ): Jetzt nach dem commit, wenn ich composer update ausführe, müsste dann composer meckern, weil sich geänderte Daten innerhalb der vendor befindet oder nicht?

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

    Standard

    Zitat Zitat von theMatrix Beitrag anzeigen
    Ich dachte der normale Weg eigene Bundles zu entwickeln wäre root/src/ geeignet und nicht der root/vendor/
    Nein, in src/ im Root deiner Contao Installation legst du Code für die Applikation ab. Im Prinzip ist es dir völlig frei gestellt - aber so ist die Konvention.


    Zitat Zitat von theMatrix Beitrag anzeigen
    Angenommen ich installiere die Bundles über require und setze mein repository path auf root/vendor/myNamespace/myBundle/...
    Setze meine Änderungen um und commite es auf git.
    Ja, so sollte das funktionieren.



    Zitat Zitat von theMatrix Beitrag anzeigen
    eine letzte Frage (hoffe ich ): Jetzt nach dem commit, wenn ich composer update ausführe, müsste dann composer meckern, weil sich geänderte Daten innerhalb der vendor befindet oder nicht?
    Nein, composer würde dich nur auf uncomitted changes hinweisen .

  18. #18
    Contao-Nutzer Avatar von theMatrix
    Registriert seit
    19.09.2013.
    Ort
    Frankfurt
    Beiträge
    154

    Daumen hoch Perfekt, Danke!

    Ich habe die eigene Bundles nun über require installiert und soweit funktioniert alles einwandfrei.

    Also in Zukunft wird praktisch über /vendor/namespace/bundleName entwickelt und committed

    Werden die Menüpunkte im Backend in der linken Spalte jetzt Alphabetisch sortiert oder habe ich da irgend wie das alles überschrieben?

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

    Standard

    Werden alphabetisch sortiert

  20. #20
    Contao-Nutzer Avatar von theMatrix
    Registriert seit
    19.09.2013.
    Ort
    Frankfurt
    Beiträge
    154

    Standard

    Danke dir
    Werden alphabetisch sortiert
    Nach sovielen Jahren wird es viel Kraft und Überwindung kosten sich daran zu gewöhnen

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
  •