Contao-Camp 2024
Ergebnis 1 bis 10 von 10

Thema: Email Versand über Hook stoppen / Einbindung Services in Hook

  1. #1
    Contao-Nutzer
    Registriert seit
    07.12.2019.
    Beiträge
    147

    Standard Email Versand über Hook stoppen / Einbindung Services in Hook

    Hallo liebe Com,

    ich habe eine Hook, welche auf den Versand von Formularen reagiert und mir dann das Eingreifen erlaubt.
    Nun möchte ich gerne, dass ich den Versand der Bestätigungs-Email beim Absenden eines Formulars verhindere, ohne hart über ein "exit" oder "die()" abzubrechen.

    Dies soll aber nur geschehen, wenn die URI einen bestimmten String enthält.
    Gelöst habe ich das ganze bisher so:


    PHP-Code:
    class SuppressEditMailListener
    {
        public function 
    suppressMailSending($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {
            if(
    strpos($_SERVER['REQUEST_URI'], '/?act=edit') !== false) {
                die();
            }
        }

    Funktionieren tut es bisher, nur habe ich zwei Probleme:
    1. Wenn der Benutzer nun das Formular absendet und sich auf der URI befindet, wird zwar keine Mail abgesendet, aber die komplette Funktionalität bricht durch das die() ab. Ich will nur den Email-Versand stoppen.
    2. Ich würde gerne statt $_SERVER['REQUEST_URI'] einen Symfony-Service hierfür verwenden (z.B RequestStack). Leider erhalte ich beim Einbinden über eine DI immer Probleme:

    Uncaught PHP Exception ArgumentCountError: "Too few arguments to function App\EventListener\SuppressEditMailListener::__cons truct(), 0 passed in website/vendor/contao/core-bundle/src/Resources/contao/library/Contao/System.php on line 281 and exactly 1 expected" at website/src/EventListener/SuppressEditMailListener.php line 11
    Muss ich hier bezüglich der Dependency-Injection etwas anders machen?
    Es liegt alles im Root App-Namespace und ich habe eine ganz normale DI, wie bei Symfony üblich, gemacht.

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

    Standard

    Das kannst du über einen prepareFormData Hook machen. Dort wird dir das Form Objekt übergeben und kannst es entsprechend ändern.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    07.12.2019.
    Beiträge
    147

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das kannst du über einen prepareFormData Hook machen. Dort wird dir das Form Objekt übergeben und kannst es entsprechend ändern.
    Hey Spooky, danke für den Tipp. Bedeutet, ich kann es ändern bzw. auch zerstören?

    Und hättest du noch einen Tipp wegen den Dependency-Injections?

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

    Standard

    Zitat Zitat von Fonjensi Beitrag anzeigen
    Und hättest du noch einen Tipp wegen den Dependency-Injections?
    Dazu musst du deinen ganzen Code posten.
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    07.12.2019.
    Beiträge
    147

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Dazu musst du deinen ganzen Code posten.
    PHP-Code:
    namespace App\EventListener;

    use 
    Symfony\Component\HttpFoundation\RequestStack;

    class 
    SuppressEditMailListener
    {

        
    /**
         * @var RequestStack 
         */
        
    private $requestStack;

        
    /**
         * SuppressEditMailListener constructor.
         * @param RequestStack $requestStack
         */
        
    public function __construct(RequestStack $requestStack)
        {
            
    $this->requestStack $requestStack;
        }

        public function 
    suppressMailSending($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {
            if(
    strpos($_SERVER['REQUEST_URI'], '/?act=edit') !== false) {
                die();
            }
        }


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

    Standard

    Wie hast du den Hook registriert? Solltest du wenn dann mit Annotations machen (ist zumindest die einfachste Möglichkeit). Das fehlt bei dir aber aktuell.
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    07.12.2019.
    Beiträge
    147

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wie hast du den Hook registriert? Solltest du wenn dann mit Annotations machen (ist zumindest die einfachste Möglichkeit). Das fehlt bei dir aber aktuell.
    Den habe ich noch über die alte PHP-Array Methode registriert und der funktioniert auch bereits.

    PHP-Code:
    <?php

    use App\EventListener\SuppressEditMailListener;

    $GLOBALS['TL_HOOKS']['prepareFormData'][] = [SuppressEditMailListener::class, 'suppressMailSending'];

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

    Standard

    Zitat Zitat von Fonjensi Beitrag anzeigen
    Den habe ich noch über die alte PHP-Array Methode registriert und der funktioniert auch bereits.
    Du hast doch geschrieben es funktioniert nicht? . I am confused.
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Nutzer
    Registriert seit
    07.12.2019.
    Beiträge
    147

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du hast doch geschrieben es funktioniert nicht? . I am confused.
    Sorry, war wohl zu undeutlich. Der Hook funktioniert problemlos.
    Nur die Dependency-Injection wirft mir Fehler, sobald ich den Request-Stack implementieren will.

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

    Standard

    Mit vendor/bin/contao-console debug:container SuppressEditMailListener kannst du überprüfen, ob der Service überhaupt im Container registriert ist.
    » 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
  •