Contao-Camp 2024
Ergebnis 1 bis 6 von 6

Thema: service container für MetaModels 2.2 schlägt fehlt

  1. #1
    Contao-Nutzer
    Registriert seit
    03.10.2020.
    Beiträge
    41

    Standard service container für MetaModels 2.2 schlägt fehlt

    Ich möchte beim Speichern eines neuen Mitgliedes in tl_member einen neuen Datensatz in einer Metamodels Tabelle anlegen.

    Hierzu habe ich einen onSubmit Callback
    PHP-Code:
         * @Callback(table="tl_member"target="config.onsubmit"
    angelegt. Darin möchte ich den notwendigen Service Container anlegen.
    Dies schlägt leider mit der folgenden Fehlermeldung fehl:
    Code:
    Attempted to call an undefined method named "getContainer"
    Der Callback ist so aufgebaut:
    PHP-Code:
    <?php
    namespace App\EventListener\DataContainer;

    use 
    Contao\CoreBundle\ServiceAnnotation\Callback;
    use 
    Contao\DataContainer;
    use \
    Contao\FrontendUser;
    use \
    Contao\ModulePersonalData;

        
    /**
         * @Callback(table="tl_member", target="config.onsubmit")
         */

    class termsOfUseDateOnsubmitCallbackListener
    {
        public function 
    onSubmitCallback(...$arguments): void
        
    {
            
    $modelName 'mm_dz_mem_member';
         
            if (
    $arguments[0] instanceof DataContainer){
                
    $dc $arguments[0];
                
    $memberId $dc->activeRecord->id;
            } else {
                
    $member $arguments[0];
                
    $actMember $member->getInstance();
                
    $memberId $actMember->id;
             }

            
    /** @var \MetaModels\IMetaModelsServiceContainer $container */ 
            
    $container $this->getContainer();
    Es scheint also noch etwas zu fehlen um den richtigen Container zu erzeugen. Kann mir jemand einen Hinweis geben?

  2. #2

  3. #3
    Contao-Nutzer
    Registriert seit
    03.10.2020.
    Beiträge
    41

    Standard

    Eigentlich dachte ich das auch. Ich habe das nach dem Beispiel versucht.
    Aber mir fehlt der Einstieg, mein Callback scheitert schon am container.

    /* Interface */
    // Den 'service container' kann man erhalten, wenn man ihn aus dem globalen Scope holt,
    // oder aber indem man auf das Event \MetaModelsEvents::SUBSYSTEM_BOOT (oder eines der
    // konkretisierten Events für Backend/Frontend) lauscht.
    // (Container nur notwendig, wenn außerhalb des MM-Zugriffs)
    /** @var \MetaModels\IMetaModelsServiceContainer $container */
    $container = $this->getContainer();

    Mir ist nicht klar, was ich tun muss um den service container aus dem globalen Scope zu holen.

  4. #4
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.681
    User beschenken
    Wunschliste

    Standard

    /** @var $container */
    $factory = $this->getContainer()->get('metamodels.factory');
    // alternativ
    //$factory = \Contao\System::getContainer()->get('metamodels.factory');
    was ist mit "alternativ"?

  5. #5
    Contao-Nutzer
    Registriert seit
    03.10.2020.
    Beiträge
    41

    Standard

    Danke.

    Wer lesen kann ist klar im Vorteil.

  6. #6
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.681
    User beschenken
    Wunschliste

    Standard

    wie im Video gesagt: Handbuch , Handbuch, Handbuch

    $this->getContainer()->get('metamodels.factory');
    funktioniert in einem MM-Template - aber auch da arbeite ich meistens mit einen Helper als Klasse, dem ich MM per Sevice übergebe

    services.yml
    PHP-Code:
    ...
      
    AppBundle\Helper\MetaModelsXyzHelper:
        public: 
    true
        arguments
    :
          - 
    '@metamodels.factory'
    ... 
    MetaModelsXyzHelper.php
    PHP-Code:
    ...
        public function 
    __construct(
            
    IFactory $factory,
    ... 

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
  •