Contao-Camp 2024
Ergebnis 1 bis 9 von 9

Thema: Fields save Callback aufrufen

  1. #1
    Contao-Nutzer
    Registriert seit
    18.06.2017.
    Beiträge
    219

    Standard Fields save Callback aufrufen

    Hallo

    ich versuche gerade folgenden CallBack aufzurufen:

    PHP-Code:
    <?php

    // src/EventListener/DataContainer/MemberEMailSaveCallback.php
    namespace App\EventListener\DataContainer;

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

    /**
     * @Callback(table="tl_member", target="fields.forwardmail.save")
     */
    class MemberEMailSaveCallback
    {
        public function 
    __invoke($valueDataContainer $dc)
        {
            
    // Show an error if tl_content.text contains "foobar"
            /*if (false !== stripos($value, 'foobar')) {
                throw new \Exception('String "foobar" is not allowed.');
            }*/
            
    throw new \Exception('Geht nicht.');

            
    // Or process the value before saving
            //$value = strtoupper($value);
            
    dump($dc);
            
    // Return the processed value
            
    return $value;
        }
    }
    Das Feld forwardmail habe ich in der Tabelle tl_member erstellt. Aber wenn ich in das Feld etwas eintrage und speichere, wird der callback nicht aufgerufen. Was fehlt denn noch?

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

    Standard

    Teste mal mit
    Code:
    vendor/bin/contao-console debug:container MemberEMailSaveCallback
    ob der Service korrekt registriert ist.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    18.06.2017.
    Beiträge
    219

    Standard

    No services found that match "MemberEMailSaveCallback".
    Wohl nicht....

    Muss ich denn bei dem Dateinamen was beachten?
    Geändert von darkness (11.01.2022 um 18:09 Uhr)

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

    Standard

    Lade mal den gesamten Inhalt deines src/ Ordners hier hoch. Außerdem deine composer.json und ggf. deine config/services.yaml, falls vorhanden.
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    18.06.2017.
    Beiträge
    219

    Standard

    was meinst du mit gesamten Inhalt

    Da sind ja auch noch eigene Contentelement drin, die ich so hier nicht hochladen möchte..

    Aber vielleicht nochmal einen Schritt zurück.

    Ich habe in src/EventListener/DataContainer die Datei MemberEMailSaveCallback.php erstellt und danach den Cache erneuert. Da "kratzt" aber was im Hinterkopf, dass ich noch was vergessen habe.
    Selbst absichtliche Fehler in der php-Datei führen zu keinem Fehler. Als wenn die gar nicht eingelesen wird.

    In dem Ordner liegt noch MemberOnsubmitCallbackListener.php. Dieser Callback wird aber richtig aufgerufen.

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

    Standard

    Zitat Zitat von darkness Beitrag anzeigen
    was meinst du mit gesamten Inhalt
    Den Inhalt des Ordners src/ Zippen und hochladen.


    Zitat Zitat von darkness Beitrag anzeigen
    Da sind ja auch noch eigene Contentelement drin, die ich so hier nicht hochladen möchte..
    Dann ist die Ferndiagnose schwierig und du musst selbst herausfinden, was nicht funktioniert .


    Zitat Zitat von darkness Beitrag anzeigen
    In dem Ordner liegt noch MemberOnsubmitCallbackListener.php. Dieser Callback wird aber richtig aufgerufen.
    Ist dieser Service korrekt registriert? Poste die debug:container Ausgabe davon.
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    18.06.2017.
    Beiträge
    219

    Standard

    vendor/bin/contao-console debug:container MemberEMailSaveCallback

    liefert jetzt:

    Code:
    Information for Service "App\EventListener\DataContainer\MemberEMailSaveCallback"
    =================================================================================
    
     ---------------- --------------------------------------------------------------------- 
      Option           Value                                                                
     ---------------- --------------------------------------------------------------------- 
      Service ID       App\EventListener\DataContainer\MemberEMailSaveCallback              
      Class            App\EventListener\DataContainer\MemberEMailSaveCallback              
      Tags             contao.callback (table: tl_member, target: fields.forwardmail.save)  
      Public           yes                                                                  
      Synthetic        no                                                                   
      Lazy             no                                                                   
      Shared           yes                                                                  
      Abstract         no                                                                   
      Autowired        no                                                                   
      Autoconfigured   no                                                                   
     ---------------- ---------------------------------------------------------------------
    Ich habe in die Datei services.yml ergänzt:

    Code:
    services:
        App\EventListener\DataContainer\MemberOnsubmitCallbackListener:
            arguments:
                - '%kas_login%'
                - '%kas_auth_data%'
        App\EventListener\DataContainer\MemberEMailSaveCallback
    Ich verwende das Nature-Theme. Mir dämmert es, als wenn ich das Problem schon mal hatte damit. Kann sein, das in dem Theme etwas verändert wurde den Callbacks?

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

    Standard

    Zitat Zitat von darkness Beitrag anzeigen
    Ich habe in die Datei services.yml ergänzt:

    Code:
    services:
        App\EventListener\DataContainer\MemberOnsubmitCallbackListener:
            arguments:
                - '%kas_login%'
                - '%kas_auth_data%'
        App\EventListener\DataContainer\MemberEMailSaveCallback
    Du hattest also schon eine services.yaml. In diesem Fall musst du dich immer selbst um die Registrierung der Services kümmern.

    Du könntest aber die services.yaml wie folgt anpassen:
    PHP-Code:
    services:
        
    _defaults:
            
    autowiretrue
            autoconfigure
    true
            bind
    :
                
    $kasLogin'%kas_login%'
                
    $kasAuthData'%kas_auth_data%'

        
    App\:
            
    resource: ../src 
    Dann noch in deinem MemberOnsubmitCallbackListener Service die Konstruktorparameternamen auf $kasLogin und $kasAuthData ändern. Nun musst du deine Services wieder nicht mehr selbst registrieren.
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Nutzer
    Registriert seit
    18.06.2017.
    Beiträge
    219

    Standard

    Funktioniert. Perfekt

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
  •