Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 40 von 52

Thema: Contao 4.4.2 Bundle / Tabellen werden von Installertool nicht erkannt

  1. #1
    Contao-Nutzer
    Registriert seit
    03.08.2017.
    Beiträge
    7

    Fehler Contao 4.4.2 Bundle / Tabellen werden von Installertool nicht erkannt

    Hallo,
    ich versuche aktuell meine eigene Contao Erweiterung zu erstellen, scheitere hier allerdings schon in einem relativ frühen Stadium, da die von mir unter dem Pfad src/ContaoBundle/Resources/contao/dca/tl_cars.php erstellte Tabelle vom Installertool nicht erkannt wird da die Datenbanken laut ihm aktuell sind.
    Ich gehe nach folgendem Tutorial vor: https://xuad.net/artikel/contao-4-bu...d-und-frontend
    Habe bereits gelesen dass es bei der Version 4.4.1 Probleme mit dem DCA-Picker gab, diese sollten aber doch bei der 4.4.2 gelöst sein?
    Hat jemand Tipps, bzw. das gleiche Problem und kann mir weiter helfen?

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

    Standard

    Benutzt du die Managed Edition oder die Standard Edition? Das von dir verlinkte Tutorial bezieht sich auf die Standard Edition.

  3. #3
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.612
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Der Berliner Stammtisch hatte gerade vor ein paar Wochen einen Contao Workshop veranstaltet.
    Hier die Infos zur Erweiterungen in Contao 4:
    https://docs.contao.ninja/de/erweiterung-c3-c4.html

  4. #4
    Contao-Nutzer
    Registriert seit
    31.03.2016.
    Ort
    Rheine
    Beiträge
    4

    Standard

    Ich zum Beispiel benutze bei der Bundle-Entwicklung die Standard Edition.
    Hast du daran gedacht, das Bundle im app/AppKernel.php zu registrieren, danach den Cache mit
    Code:
    php bin/console cache:clear --env=prod --no-warmup
    php bin/console cache:warmup --env=prod
    zu löschen?

    Als Tipp: Ich lösche immer die Cache-Ordner unter var/cache. Dann ist das Backend zwar urmellangsam aber alle Änderungen an den DCAs werden umgehend erkannt.

    Bin auf deine Rückmeldung gespannt.

  5. #5
    Contao-Nutzer
    Registriert seit
    03.08.2017.
    Beiträge
    7

    Standard

    Vielen Dank für eure Kommentare,
    mein Cache war geleert, diesen Composer Befehl hatte ich bereits verwendet
    allerdings hatte ich tatsächlich nicht die Standard Edition (auf die ich jetzt natürlich umgestiegen bin) verwendet, was meine Probleme wahrscheinlich verursacht hat.

    Vielen dank für den Workshop, es hakt zwar noch hier und da aber ich glaube ich bin jetzt auf dem richtigen Weg

  6. #6
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Das heißt, in der Managed-Edition kann ich kein eigenes Modul mehr schreiben? Versuche auch gerade, in der Managed-Edition testweise ein Modul zu erstellen. Gelingt mir nicht. Weder taucht es im BE auf noch werden die Tabellen im Installer erkannt. Kann ich der Managed-Edition irgendwie beibringen, mein Modul (Bundle) zu laden?

  7. #7
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Es werden nur die Bundles für Contao erkannt, die auch per composer require installiert wurden, da sie sonst nicht in der Composer installed.json eingetragen sind. Da ich quasi in jedem Projekt ein eigenes Modul packe, kann ich den Manager also vergessen.

    Was mache ich dann, wenn ich an einer bestehenden (fremden) 4.4er Managed-Edition mal schnell ein Modul einbauen will? Also eines, dass ich nicht auf Github veröffentlichen will? Die Lösung über die installed.json finde ich echt unglücklich. Oder übersehe ich was? Ja, ich weiß, system/modules wird nach wie vor geladen. Aber das wäre ja wieder ein Rückschritt, oder?

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

    Standard

    Zitat Zitat von lomex Beitrag anzeigen
    Das heißt, in der Managed-Edition kann ich kein eigenes Modul mehr schreiben?
    Nein, natürlich nicht. Wenn du dir ein Bundle schreibst, dann brauchst du für die Managed Edition ein Contao Manager Plugin. Siehe dazu die Dokumentation: https://docs.contao.org/books/extend...n/plugins.html

    Wobei die Dokumentation hier auch noch etwas rudimentär ist. Am besten siehst du dir es von anderen Bundles ab, was man alles machen muss. Siehe zB diesen Pull Request: https://github.com/Craffft/css-style...e/pull/3/files (den conflict mit "contao/core": "*" brauchst du nicht).

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

    Standard

    Zitat Zitat von lomex Beitrag anzeigen
    Da ich quasi in jedem Projekt ein eigenes Modul packe, kann ich den Manager also vergessen.
    Ich verstehe nicht was du meinst. Warum solltest du den Manager vergessen müssen?


    Zitat Zitat von lomex Beitrag anzeigen
    Was mache ich dann, wenn ich an einer bestehenden (fremden) 4.4er Managed-Edition mal schnell ein Modul einbauen will? Also eines, dass ich nicht auf Github veröffentlichen will?
    Ein Bundle kann auf verschiedene Weisen installiert werden, ob das Bundle öffentlich oder nicht ist, ist dabei nicht relevant.

    Wenn du ein Bundle nur für eine einzige Installation brauchst, kannst du auch das (in der Managed Edition automatisch geladene) AppBundle verwenden.


    Zitat Zitat von lomex Beitrag anzeigen
    Die Lösung über die installed.json finde ich echt unglücklich.
    Was meinst du mit installed.json?

  10. #10
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Nein, natürlich nicht. Wenn du dir ein Bundle schreibst, dann brauchst du für die Managed Edition ein Contao Manager Plugin. Siehe dazu die Dokumentation: https://docs.contao.org/books/extend...n/plugins.html
    Ja, habe ich. Reicht aber nicht, weil es nicht erkannt / geladen wird

    Wobei die Dokumentation hier auch noch etwas rudimentär ist. Am besten siehst du dir es von anderen Bundles ab, was man alles machen muss.
    Habe ich.

    Ich verstehe nicht was du meinst. Warum solltest du den Manager vergessen müssen?
    Weil die Bundles von Contao nicht erkannt werden, die ich per Hand nach vendor packe.

    Wenn du ein Bundle nur für eine einzige Installation brauchst, kannst du auch das (in der Managed Edition automatisch geladene) AppBundle verwenden.
    Wie? Das hört sich interessant an. Aber eigentlich will ich ja "nur", dass ein normales Bundle als Contao Modul erkannt wird (unter Angabe von "extra").

    Was meinst du mit installed.json?
    Composer legt in vendor/composer eine installed.json an mit allen installierten Composer Paketen. Das Manager-Plugin-Bundle sucht in dieser Datei nach installierten Contao Erweiterungen ("extra" mit ContaoManagerPlugin vorhanden). Also muss ich scheinbar zwingend ein Bundle mit Composer installieren, damit es in der installed.json eingetragen wird. Und das finde ich doof.

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

    Standard

    Zitat Zitat von lomex Beitrag anzeigen
    Weil die Bundles von Contao nicht erkannt werden, die ich per Hand nach vendor packe.
    In den vendor Ordner gibst du nie etwas selbst, der wird von Composer verwaltet.


    Zitat Zitat von lomex Beitrag anzeigen
    Wie? Das hört sich interessant an. Aber eigentlich will ich ja "nur", dass ein normales Bundle als Contao Modul erkannt wird (unter Angabe von "extra").
    Einfach nur im Ordner "src" anlegen, so wie ein normales Symfony bzw. Contao Bundle. So fern du nicht auch zB eigene Routes brauchst (oder andere Interfaces des Contao MAnager Plugins), brauchst du für das AppBundle in der Managed Edition auch kein eigenes Contao Manager Plugin. Falls du doch eigene Routes brauchst, musst du diese mit dem entsprechenden Interface des Contao Manager Plugins laden lassen. Siehe dazu auch die Dokumentation oder auch diese Anleitung: https://community.contao.org/de/show...l=1#post440081


    Zitat Zitat von lomex Beitrag anzeigen
    Also muss ich scheinbar zwingend ein Bundle mit Composer installieren, damit es in der installed.json eingetragen wird. Und das finde ich doof.
    Das ist normal. Angenommen du legst dir in app/Resources/contao irgendwo eigene Klassen oder Module ab, dann musst du diese auch über den Autoloader von Composer laden lassen (natürlich kannst du in Contao 4 noch den alten Class Loader von Contao 2 bzw. 3 nehmen, aber der ist deprecated). Benötigst du ein Contao Manager Plugin, musst du auch dieses vom Autoloder laden lassen. Warum du das "doof" findest, weiß ich natürlich nicht .
    Geändert von Spooky (12.08.2017 um 08:44 Uhr)

  12. #12
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.612
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wir hatten vom Berliner Stammtisch einen Workshop dazu. In der Doku von BugBuster findest Du alles wichtige (auch in Gegenüberstellungen C3 / C4):
    https://docs.contao.ninja/de/erweiterung-c3-c4.html

  13. #13
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Danke erstmal für die Hinweise.
    Das mit dem Autoloader habe ich ja verstanden und will dazu ja auch den Composer Autoloader nutzen.

    Habe jetzt in der Standard-Edition ein Modul (unter /src) ans Laufen gebracht. Das gleiche Modul wird in der Managed-Edition jedoch nicht erkannt.
    Egal ob mit oder ohne ContaoManagerPlugin. Aber das liegt meines Erachtens daran, dass dieses Plugin nicht in der vendor/composer/installed.json (weil ich ja mein Modul nicht als Composer Paket installiert habe) auftaucht und daher das ContaoManagerPlugin nicht geladen wird. Und das finde ich doof. Das hat nichts mit dem Autoloader zu tun. Aber vielleicht gibt es ja eine Lösung, die ich nicht sehe.

    Wie bekomme ich also ein Modul unter /src in der Managed-Edition ans Laufen?

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

    Standard

    Zitat Zitat von lomex Beitrag anzeigen
    Das hat nichts mit dem Autoloader zu tun.
    Doch (unter Anderem). Das alles hat nichts mit der installed.json zu tun.

    Erkläre lieber mal genau, was du in der Managed Edition versucht hast.

  15. #15
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    In der Managed-Edition im manager-plugin dort im PluginLoader steht:

    /**
    * Finds Contao manager plugins from Composer's installed.json.
    *
    * @author Andreas Schempp <https://github.com/aschempp>
    */
    So ganz abwegig scheint mir das nicht zu sein. Mit composer dumpautoload werden die Klassen unter src/ für den Autoloader registriert, tauchen aber nicht in der installed.json auf und werden (meines Erachtens) nicht in der Managed-Edition gefunden.

    Was ich versucht habe (in Anlehnung an das von Dir erwähnte Tutorial von Xuad):

    /src/Contao4You/TEST/TESTBundle.php
    /src/Contao4You/TEST/ContaoManager/Plugin.php
    /src/Contao4You/TEST/Resources/contao/dca (etc)

    in der /composer.json folgendes angegeben:
    Code:
    "autoload": {
            "psr-4" : { "": "src/" }
        },
    Danach composer update ausgeführt, das Contao Script hat das Modul (Bundle) nicht erkannt. Der Installer findet die Tabelle nicht.

    Wie gesagt, das Modul läuft ja in der Standard-Edition. Hier habe ich nur das ContaoManagerPlugin hinzugefügt.

    Das kann jedoch nicht gefunden werden, weil der PluginLoader nach dem "extra" Eintrag in der composer.json sucht, die nur beim Installieren eines Composer Paketes in die installed.json eingetragen wird.

    Code:
    foreach ($json as $package) {
                if (isset($package['extra']['contao-manager-plugin'])) {
                    if (!class_exists($package['extra']['contao-manager-plugin'])) {
                        throw new \RuntimeException(
                            sprintf('Contao Manager Plugin "%s" was not found.', $package['extra']['contao-manager-plugin'])
                        );
                    }
    
                    $plugins[$package['name']] = new $package['extra']['contao-manager-plugin']();
                }
            }
    Also nochmal:
    Ich habe ein funktionierendes Bundle in der Standard-Edition. Was muss ich tun, damit es auch in der Managed-Edition läuft? Mir reicht ja, wenn jemand sagt, dass das nicht geht. Dann brauche ich es nicht weiter versuchen.

  16. #16
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.508
    User beschenken
    Wunschliste

    Standard

    installed.jons? Noch nie was von gehört und noch nie gebraucht.

    Vielleicht hilft dir das:
    https://docs.contao.ninja/de/vortrag...undle.html#/13
    und der composer.json Anteil deiner Erweiterung:
    https://docs.contao.ninja/de/vortrag...dle.html#/13/2
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  17. #17
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Nein. Hilft leider nicht. Weil ich ja das Paket nicht per composer installieren, sondern manuell unter src/ bereitstellen will.

  18. #18
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.508
    User beschenken
    Wunschliste

    Standard

    Das Manager Plugin wird aber nur tätig durch den Aufruf composer update/install. Eventuell gibt es noch einen contao-console Aufruf der das auch kann.

    Manuell habe ich noch nie was direkt in die Installation gepackt. Ich vermute mal das das nur in der Standard Edition geht.
    Ich installiere in so einem Fall eben direkt von Platte statt GitHub/Packagist.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

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

    Standard

    Siehe die Dokumentation: https://docs.contao.org/books/extend...manager-plugin

    Für lokale Bundles solltest du es genau so machen, wie es dort steht: eine app/ContaoManagerPlugin.php anlegen und autoloaden lassen. Dein src/Contao4You/TEST/ContaoManager/Plugin.php verschiebst du also nach app/ContaoManagerPlugin.php und schreibst den Inhalt entsprechend um. In diesem Contao Manager Plugin verwaltest du dann das Laden der Bundles in der Managed Edition für all deine lokalen Bundles und sonstigen Symfony (also nicht Contao) Bundles.

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

    Standard

    composer install ist bei lokalen Bundles nicht notwendig - bzw. nur in sofern notwendig, weil composer install auch ein dump-autoload macht. Es schadet generell aber nicht einfach ein
    Code:
    composer install --optimize-autoloader
    zu machen, da dadurch auch ein cache:clear und cache:warmup ausgeführt wird, als auch eben ein Autoloader Dump (in diesem Falle für Performance optimiert).

  21. #21
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Es wird mir hier gerade zu viel geraten. Mir würde es helfen, wenn jemand es schon so gemacht hätte...

    @BugBuster
    Das ist richtig, durch composer update wird ein contao script ausgeführt. Hier sieht man dann auch, ob das Modul (Bundle) als Contao Modul erkannt wurde.
    Normalerweise würde ja ein composer dumpautoload reichen, nur hier eben nicht.

    @Spooky
    Der Autoloader lädt Klassen bei Bedarf. Das hat nichts mit der Erkennung des Manager-Plugins zu tun, der nach Contao-Modulen sucht. Wir drehen uns gerade im Kreis. Hast Du schonmal ein eigenes Modul unter src/ in der Managed-Edition installiert?

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

    Standard

    Zitat Zitat von lomex Beitrag anzeigen
    Es wird mir hier gerade zu viel geraten. Mir würde es helfen, wenn jemand es schon so gemacht hätte...
    Habe ich schon viele male .



    Zitat Zitat von lomex Beitrag anzeigen
    Der Autoloader lädt Klassen bei Bedarf.
    composer dump-autoload erzeugt den Inhalt von vendor/composer/autoload_….php (und vendor/autoload.php). Dort werden die einzelnen PHP Dateien, die in der composer.json (deiner Installation und aller Pakete) im "autoload" Bereich angegeben wurden, im Autoloader registriert. Der Autoloader lädt dann diese Klassen nach Bedarf. Der Autoloader kann keine Klassen laden, die er nicht kennt.



    Zitat Zitat von lomex Beitrag anzeigen
    Das hat nichts mit der Erkennung des Manager-Plugins zu tun
    In so fern schon, denn wenn das ContaoManagerPlugin nicht im Autoloader registriert ist, kann es Contao auch nicht finden.



    Zitat Zitat von lomex Beitrag anzeigen
    Wir drehen uns gerade im Kreis. Hast Du schonmal ein eigenes Modul unter src/ in der Managed-Edition installiert?
    Ja, so wie beschrieben schon viele male. Siehe auch das Beispiel, dass ich schon mal verlinkt habe. Darüberhinaus habe ich dir ja schon hier gesagt, was du an deinem aktuellen Setup ändern musst.
    Geändert von Spooky (12.08.2017 um 14:57 Uhr)

  23. #23
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Ich danke Dir für deine Geduld. Aber egal, was ich versuche, es passiert nichts.

    Habe jetzt testweise mal /app das ContaoManagerPlugin.php gepackt. Jedoch wird das nie geladen laut xdebug.
    Kann also reinschreiben was ich will... Selbst wenn meine Autoloader Konfiguration falsch wäre, müsste ja dann zumindest eine Exception kommen, dass die Klasse nicht gefunden würde.

    PHP-Code:
    <?php

    namespace Contao4You\TEST;

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

    class 
    Plugin implements BundlePluginInterface
    {
        
    /**
         * {@inheritdoc}
         */
        
    public function getBundles(ParserInterface $parser)
        {
            return [
                
    BundleConfig::create(TESTBundle::class)
                    ->
    setLoadAfter([ContaoCoreBundle::class])
                    ->
    setReplace(['TEST']),
            ];
        }
    }
    Wenn ich alles in /src/AppBundle packe wird das Bundle auch nicht von Contao erkannt. Composer update bzw. dumpautoload natürlich erneut ausgeführt. Composer.json habe ich ebenfalls angepasst mit Classloader app/ContaoManagerPlugin (etc).
    Nebenbei gefällt mir das mit AppBundle auch nicht. Würde lieber meinen eigenen Namen, also /src/Contao4You/TEST/TESTBundle.php nutzen. Aber ich bekomme es ja schon mit AppBundle nicht hin.

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

    Standard

    Das Contao Manager Plugin unter app/ContaoManagerPlugin.php muss bei dir folgendermaßen aussehen:
    PHP-Code:
    <?php

    use Contao4You\TEST\TESTBundle;
    use 
    Contao\CoreBundle\ContaoCoreBundle;
    use 
    Contao\ManagerPlugin\Bundle\BundlePluginInterface;
    use 
    Contao\ManagerPlugin\Bundle\Parser\ParserInterface;
    use 
    Contao\ManagerPlugin\Bundle\Config\BundleConfig

    class 
    ContaoManagerPlugin implements BundlePluginInterface
    {
        
    /**
         * {@inheritdoc}
         */
        
    public function getBundles(ParserInterface $parser)
        {
            return [
                
    BundleConfig::create(TESTBundle::class)
                    ->
    setLoadAfter([ContaoCoreBundle::class])
            ];
        }
    }
    Geändert von Spooky (12.08.2017 um 16:32 Uhr)

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

    Standard

    Deine Bundle Ordner Struktur entspricht außerdem nicht ganz der Konvention von Symfony. Statt

    src/Contao4You/TEST/TESTBundle.php

    solltest du vielleicht eher

    src/Contao4You/TestBundle/Contao4YouTestBundle.php

    verwenden, spielt aber grundsätzlich eine untergeordnete Rolle.
    Geändert von Spooky (12.08.2017 um 16:33 Uhr)

  26. #26
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Habe jetzt einen Teilerfolg:

    Habe den ContaoManagerPlugin unter src/Contao4You/TEST/ContaoManagerPlugin.php gespeichert sowie in der Composer.json die Classmap entsprechend angepasst.

    1. durch die Classmap findet der PluginLoader die globale ContaoManagerPlugin Klasse
    2. WICHTIG: (mein Fehler): kein Namespace für das Plugin. Und die Klasse muss auch genauso heißen (hieß bei mir noch Plugin, was in der Std.-Edition auch geht)
    3. Vermutlich ist es besser, das Plugin tatsächlich unter /app zu packen, dann können dort weitere Bundles registriert werden. Wollte nur sehen, ob es so auch klappt.

    In dieser Klasse registrieren wir jetzt unser Bundle. Läuft. Wird jetzt mit composer update und im BE auch angezeigt.
    Nur das Install-Tool will die Tabellen noch nicht aktualisieren.

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

    Standard

    Zitat Zitat von lomex Beitrag anzeigen
    Selbst wenn meine Autoloader Konfiguration falsch wäre, müsste ja dann zumindest eine Exception kommen, dass die Klasse nicht gefunden würde.
    Nein, siehe https://github.com/contao/manager-pl....php#L160-L164
    PHP-Code:
    // Instantiate a global plugin to load AppBundle or other customizations
    $appPlugin '\ContaoManagerPlugin';
    if (
    class_exists($appPlugin)) {
        
    $this->plugins['app'] = new $appPlugin();

    Das Contao Manager Plugin (für lokale Bundles) wird nur benutzt, wenn es tatsächlich existiert.

  28. #28
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Das habe ich auch gerade gesehen und meine Konfiguration entsprechend angepasst.
    Jetzt weiß ich auch, wofür die Classmap gut ist...

  29. #29
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Das Problem mit dem Datenbank Update ist auch gelöst. Hatte beim Suchen/Ersetzen einen Tippfehler. Statt tl_test stand da t_test.

  30. #30
    Contao-Nutzer
    Registriert seit
    23.07.2009.
    Ort
    mal hier, mal da
    Beiträge
    141
    Partner-ID
    5687

    Standard

    Moin,

    ich muss mich jetzt hier mal einklinken, da mein Problem eigentlich genau dasselbe ist! Ich programmiere schon viele Jahre mit Contao und auch seit 2 Jahren mit Symfony. Trotzdem bekomme ich es nicht gebacken eine lokale Extension in der Managed Edition anzumelden. Ich habe versucht es anhand dieses Threads und unzähliger Tutorials nachzubauen, aber es läuft einfach nicht.

    Meine Ordner-Struktur sieht so aus (ohne den Standard-Kram):

    Code:
    - app
    -- ContaoManagerPlugin.php
    - src
    -- vendorName
    --- TestBundle
    ---- vendorNameTestBundle.php
    ---- Resources
    ----- config
    ------ config.php
    ----- dca
    ------ tl_irgendwas.php
    ----- ...

    Die /composer.json habe ich wie in der Anleitung um folgendes ergänzt:

    Code:
    "autoload": {
            "classmap": [
                "app/ContaoManagerPlugin.php"
            ],
            "psr-4": {
                "vendorName\\TestBundle\\": "src/vendorName/TestBundle/"
            }
        },

    In der app/ContaoManagerPlugin.php steht Folgendes:

    PHP-Code:
    use vendorName\TestBundle\vendorNameTestBundle;
    use 
    Contao\CoreBundle\ContaoCoreBundle;
    use 
    Contao\ManagerPlugin\Bundle\BundlePluginInterface;
    use 
    Contao\ManagerPlugin\Bundle\Parser\ParserInterface;
    use 
    Contao\ManagerPlugin\Bundle\Config\BundleConfig;

    class 
    ContaoManagerPlugin implements BundlePluginInterface
    {
        
    /**
         * {@inheritdoc}
         */
        
    public function getBundles(ParserInterface $parser)
        {
            return [
                
    BundleConfig::create(vendorNameTestBundle::class)
                    ->
    setLoadAfter([ContaoCoreBundle::class])
            ];
        }


    Das wird aber alles nicht erkannt und wenn ich im Manager "Pakete aktualisieren" nutze, zerschießt es mir das ganze System.
    Leider steht mir kein SSH zur Verfügung.

    Nun meine Frage: Wie muss die Ordner- bzw. Dateistruktur grundlegend aussehen?
    @lomex: Wenn ich es richtig sehe, hast du es inzwischen zum Laufen gebracht?! Wie sehen deine Dateien bzw. Dateistruktur aus?


    Vielen Dank für eure Hilfe und einen schönen Sonntag!

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

    Standard

    Zitat Zitat von raveolution Beitrag anzeigen
    Meine Ordner-Struktur sieht so aus (ohne den Standard-Kram):

    Code:
    - app
    -- ContaoManagerPlugin.php
    - src
    -- vendorName
    --- TestBundle
    ---- vendorNameTestBundle.php
    ---- Resources
    ----- config
    ------ config.php
    ----- dca
    ------ tl_irgendwas.php
    ----- ...
    Du musst die Contao Konfiguration in den Unterorder contao im Ordner Resources geben. Also …/TestBundle/Resources/contao/….

    Außerdem sollte dein Vendor Name mit einem Großbuchstaben beginnen . Sonst scheint alles zu stimmen.



    Zitat Zitat von raveolution Beitrag anzeigen
    Das wird aber alles nicht erkannt und wenn ich im Manager "Pakete aktualisieren" nutze, zerschießt es mir das ganze System.
    Was genau passiert? Welchen PHP Pfad hast du im Contao Manager eingetragen? Welcher Hoster?

  32. #32
    Contao-Nutzer
    Registriert seit
    23.07.2009.
    Ort
    mal hier, mal da
    Beiträge
    141
    Partner-ID
    5687

    Daumen hoch

    Zitat Zitat von Spooky Beitrag anzeigen
    Du musst die Contao Konfiguration in den Unterorder contao im Ordner Resources geben. Also …/TestBundle/Resources/contao/….

    Außerdem sollte dein Vendor Name mit einem Großbuchstaben beginnen . Sonst scheint alles zu stimmen.
    Wow, vielen Dank für die schnelle Antwort!
    Tatsächlich hatte ich sogar den Unterordner "contao". Ich hatte ihn nur in meiner Auflistung hier übersehen. Und mein Vendor beginnt im System auch mit einem Großbuchstaben.

    Ich habe jetzt noch einmal eine komplett neue Installation mit Contao 4 Managed Edition aufgesetzt und habe genau die o.g. Struktur beibehalten. Und siehe da: nun geht es!

    Ich glaube auch zu wissen, wo mein Fehler vorher war: Ich hatte ursprünglich unter src/VendorName/TestBundle/ noch einen Ordner "ContaoManager" mit der Datei "Plugin.php", sowie den Eintrag "contao-manager-plugin: ..." in der composer.json aus einem anderen Tutorial. Diese habe ich jetzt nicht mehr drin.

    Vielleicht sollte man dieses Vorgehen für lokale Bundles mit der Managed Edition noch einmal explizit irgendwo dokumentieren! Für die Standard-Edition und für eigene öffentliche Bundles (in Standard und Managed) ist das ja schon gut dokumentiert. Aber ohne diesen Thread hätte selbst ich - als erfahrener Entwickler - das niemals hinbekommen.


    Also, wirklich ein großes Danke für eure schnelle Hilfe und einen schönen Rest-Sonntag.

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

    Standard

    Ja, meine Erkenntnisse habe ich auch hauptsächlich aus dem Studium des Codes, nicht von der Dokumentation selbst.

  34. #34
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard ContaoManagerPlugin

    Nachdem ich erfolgreich in der Standard-Edition ein Modul geschrieben habe, habe ich mich Heute an der Managed-Edition versucht, da es die Standard-Edition ja wohl bald nicht mehr geben wird.
    Mein erstes Problem war, das Bundle in Contao überhaupt bekannt zu machen.

    Alle Beispiele beziehen sich immer auf Github/Packagist etc. Ich will aber ein lokales Modul entwickeln.
    Daher bin ich über folgende Stolperfallen gestoßen:

    In den ganzen Beispielen zum ContaoManagerPlugin befindet sich diese Klasse immer in einem Namespace. Das ist im Falle einer Installation über composer install auch nicht dramatisch. Hier wird der Pfad zum ContaoManagerPlugin auch über die composer.json und der "extra":"contao-manager-plugin" Option mitgegeben. Bei einem lokalen Modul funktioniert das aber nicht. Hier muss die Klasse zwingend ContaoManagerPlugin heißen und nicht z.B. Plugin im Ordner ContaoManager. Dann wird durch ein composer install auch das Bundle gefunden und eingebunden.

    Hintergrund ist, dass das manager-plugin nur nach einer globalen ContaoManagerPlugin Klasse sucht. Diese muss in der globalen composer.json per Classmap bekannt gemacht werden.

    Code:
    "autoload": {
            "classmap": [
                "src/Acme/Foo/ContaoManagerPlugin.php"
            ],
    Aber wie gehe ich denn vor, wenn ich eine Erweiterung schreiben möchte, die ich auch auf Packagist veröffentlichen möchte? Wo läuft die denn während der Entwicklung? In src? In vendor werden ja nur Pakete per composer installiert, oder?

    Unabhängig von der vorherigen Frage:
    Spätestens wenn ich zwei eigene, von einander unabhängige Module in jeweils eigene Bundles packen möchte, komme ich mit einer globalen ContaoManagerPlugin Klasse nicht aus, oder? Oder anders gefragt, wie kann ich sagen wir mal zwei alte Module für Contao 4 Managed Edition anpassen und in zwei Bundlen veröffentlichen ohne composer install?

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

  36. #36
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Was genau soll ich da sehen? Wie ich ein Bundle über Composer installiere und das ich dann das Plugin über extra definieren muss, weiß ich und hatte ich ja auch geschrieben.

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

    Standard

    Hm, dann habe ich deine Frage nicht genau verstanden.

  38. #38
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Genau genommen hatte ich zwei Fragen :-) Aber es geht mir erstmal um diese hier:

    Ich habe einige eigene Erweiterungen. Sie liegen alle nicht bei Github / Packagist. Zwei davon möchte ich nun unter /src ans Laufen bringen. Aber jede Erweiterung in einem eigenen Bundle. Wie? Da es ja nur eine globale ContaoManagerPlugin Klasse gibt, weiß ich nicht, wie ich das bewerkstelligen soll.

    Daher kam mir die Idee, dies über ein lokales Repository zu lösen und beide Erweiterungen über Composer zu installieren. Aber das erscheint mir doch ein zu großer Aufwand.

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

    Standard

    Zitat Zitat von lomex Beitrag anzeigen
    Da es ja nur eine globale ContaoManagerPlugin Klasse gibt, weiß ich nicht, wie ich das bewerkstelligen soll.
    Im Contao Manager Plugin kannst du ja beliebig viele Bundles laden. zB:
    PHP-Code:
    class ContaoManagerPlugin implements BundlePluginInterface
    {
        
    /**
         * {@inheritdoc}
         */
        
    public function getBundles(ParserInterface $parser)
        {
            return [
                
    BundleConfig::create(Bundle1::class)->setLoadAfter([ContaoCoreBundle::class]),
                
    BundleConfig::create(Bundle2::class)->setLoadAfter([ContaoCoreBundle::class]),
                
    BundleConfig::create(Bundle2::class)->setLoadAfter([ContaoCoreBundle::class]),
            ];
        }


  40. #40
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    *Kopfschüttel*
    Danke. Das wars. Sehr gut!

    Jetzt verrate mir doch mal bitte Deinen Workflow, wenn Du ein Plugin für Composer programmierst.
    Habe gelesen, dass es teilweise so gemacht wird:
    1. leeres Projekt auf Packagist anlegen
    2. per composer install installieren
    3. Ordner unter /vendor löschen und
    4. per Symlink mit seinem lokalen Sources verlinken
    5. Am Ende Ordner unter /vendor wieder löschen und per
    6. composer update wieder installieren

    Gibt es noch andere Workflows?

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
  •