Contao-Camp 2024
Ergebnis 1 bis 4 von 4

Thema: Call to a member function - eigenes Bundle benötigt zusätzliches Bundle

  1. #1
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard Call to a member function - eigenes Bundle benötigt zusätzliches Bundle

    Wenn ich in eigenen Bundles ein anderes Bundle benötige, schreibe ich in der composer.json (von schachbulle/contao-counter-bundle):
    PHP-Code:
        "require": {
            
    "php""^5.6 || ^7.0",
            
    "contao/core-bundle""^4",
            
    "contao/news-bundle""*",
            
    "schachbulle/contao-helper-bundle""*"
        
    }, 
    Für das news-bundle reicht das noch nicht, weshalb in src/ContaoManager/Plugin.php steht:
    PHP-Code:
        public function getBundles(ParserInterface $parser)
        {
            return [
                
    BundleConfig::create(ContaoCounterBundle::class)
                    ->
    setLoadAfter([ContaoCoreBundle::class, \Contao\NewsBundle\ContaoNewsBundle::class]),
            ];
        } 
    Leider scheint es dasselbe Problem auch mit schachbulle/contao-helper-bundle zu geben. Mögliche Ursache: dieses Bundle wird erst nach schachbulle/contao-counter-bundle geladen, weswegen die Funktion (Call to a member function ...) nicht gefunden wird. Ich tippe mal, das ich auch hier setLoadAfter bedienen muß - und versuchte:
    PHP-Code:
        public function getBundles(ParserInterface $parser)
        {
            return [
                
    BundleConfig::create(ContaoCounterBundle::class)
                    ->
    setLoadAfter([ContaoCoreBundle::class, \Contao\NewsBundle\ContaoNewsBundle::class, \Schachbulle\ContaoHelperBundle\ContaoHelperBundle::class]),
            ];
        } 
    Wahlweise auch \Schachbulle\ContaoHelperBundle\Classes::class oder \Schachbulle\ContaoHelperBundle\classes\Cache::cla ss oder \Schachbulle\ContaoHelperBundle::class. Keine Variante scheint zu funktionieren.

    ContaoCounterBundle: https://github.com/Samson1964/contao-counter-bundle
    ContaoHelperBundle: https://github.com/Samson1964/contao-helper-bundle
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

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

    Standard

    Die Reihenfolge ist nur in bestimmten Fällen relevant (bspw. wenn ein Bundle das DCA eines anderen Bundles erweitert oder ändert). Was genau ist der Fehler?
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Ich bin in meinem Code nochmal auf die Suche gegangen. Das Problem saß vor dem PC. schachbulle/contao-helper-bundle braucht nicht extra mit setLoadAfter geladen werden. Ich hatte die Codezeile mit "new Class" einfach nicht in der Programmlogik drin und demzufolge konnte auch keine Funktion der Klasse geladen werden.

    Wie würde denn die richtige Eintragung in setLoadAfter aussehen, wenn ich das doch mal brauchen würde? Oder sind davon nur die Core-Bundles(news, newsletter, faq usw.) betroffen?
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

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

    Standard

    Mit "setLoadAfter" sagst du, dass das Bundle nach den angegebenen anderen Bundles geladen werden soll von Contao. Ein Beispiel findest du hier: https://docs.contao.org/dev/framewor...lugininterface

    Wenn also dein eigenes Bundle bspw. das DCA von tl_news ändert/erweitert, dann würdest du folgendes angeben:
    PHP-Code:
    class Plugin implements BundlePluginInterface
    {
        public function 
    getBundles(ParserInterface $parser)
        {
            return [
                
    BundleConfig::create(ContaoCounterBundle::class)
                    ->
    setLoadAfter([ContaoNewsBundle::class]),
            ];
        }

    Wenn dein eigenes Bundle das DCA von tl_news und tl_calendar_events ändert/erweitert, dann würdest du das so angeben:
    PHP-Code:
    class Plugin implements BundlePluginInterface
    {
        public function 
    getBundles(ParserInterface $parser)
        {
            return [
                
    BundleConfig::create(ContaoCounterBundle::class)
                    ->
    setLoadAfter([
                        
    ContaoCalendarBundle::class,
                        
    ContaoNewsBundle::class,
                    ]),
            ];
        }

    Wenn dein eigenes Bundle das DCA von tl_news, tl_calendar_events und tl_content ändert/erweitert, dann würdest du das so angeben:
    PHP-Code:
    class Plugin implements BundlePluginInterface
    {
        public function 
    getBundles(ParserInterface $parser)
        {
            return [
                
    BundleConfig::create(ContaoCounterBundle::class)
                    ->
    setLoadAfter([
                        
    ContaoCoreBundle::class,
                        
    ContaoCalendarBundle::class,
                        
    ContaoNewsBundle::class,
                    ]),
            ];
        }

    etc.
    » sponsor me via GitHub or PayPal or Revolut

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
  •