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

Thema: PostDownload Hook benutzen

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

    Standard PostDownload Hook benutzen

    Hey,

    ich versuche einen eigenen Download-Tracker zu basteln, allerdings scheitert es gerade schon daran, den PostDownload Hook richtig zu benutzen.

    Ich habe die Ordner/Datei "src/EventListener/PostDownloadListener.php" erstellt und darin den Code aus der Doku eingesetzt.
    Allerdings passiert da gar nichts wenn ich da versuche was zu loggen. Hab auch mal ein "dump();die();" versucht, um zu schauen ob da überhaupt irgendwas passiert, aber ohne Erfolg.

    Hab auch zusätzlich mal noch in der composer.json den autoload hinzugefügt:

    Code:
    "autoload": {
          "psr-4": {
                "App\\": "src/"
           }
    }

    Hat jemand eine Idee wie ich das zum Laufen bekomme bzw. richtig debuggen/testen kann?

    Kann leider die Konsole nicht benutzen, weil das Projekt lokal über MAMP läuft und ich das da irgendwie nicht hinbekomme.

    Schon mal vielen Dank im Vorraus.

  2. #2
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.972

    Standard

    Hab auch zusätzlich mal noch in der composer.json den autoload hinzugefügt:
    Hast Du danach auch composer dump-autoload ausgeführt?

    In der vendor/composer/autoload_psr4.php sollte dann ein Eintrag für App zu finden sein:

    PHP-Code:
    'App\\' => array($baseDir '/src'), 
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

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

    Standard

    Der Hook an sich existiert zwar noch, allerdings ist dieser Teil des Legacy Frameworks welches nicht mehr in allen Stellen von Contao benutzt wird. Die neuen Download(s) Inhaltselemente in Contao 5 nutzen nicht mehr die Funktion, die diesen Hook auslösen würde.

    Um alle (von der Applikation gesendeten) Downloads abzufangen, müsstest eher einen kernel.response Event Listener implementieren.
    » sponsor me via GitHub or PayPal or Revolut

  4. #4
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Hast Du danach auch composer dump-autoload ausgeführt?

    In der vendor/composer/autoload_psr4.php sollte dann ein Eintrag für App zu finden sein:

    PHP-Code:
    'App\\' => array($baseDir '/src'), 
    Jep, der ist ganz am Schluss drin.

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

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Der Hook an sich existiert zwar noch, allerdings ist dieser Teil des Legacy Frameworks welches nicht mehr in allen Stellen von Contao benutzt wird. Die neuen Download(s) Inhaltselemente in Contao 5 nutzen nicht mehr die Funktion, die diesen Hook auslösen würde.

    Um alle (von Contao gesendeten) Downloads abzufangen, müsstest eher einen kernel.resonse Event Listener implementieren.
    Ah okay, weißt du zufälligerweise wie ich das umsetzen kann?

    Einfach den Code in die PostDownloadListener.php einfügen?
    Code:
    use Symfony\Component\HttpKernel\Event\ResponseEvent;
    
    public function onKernelResponse(ResponseEvent $event): void
    {
        $response = $event->getResponse();
    
        // ... modify the response object
    }

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

    Standard

    So zB.:
    PHP-Code:
    // src/EventListner/DownloadResponseListener.php
    namespace App\EventListener;

    use 
    Symfony\Component\EventDispatcher\Attribute\AsEventListener;
    use 
    Symfony\Component\HttpFoundation\BinaryFileResponse;
    use 
    Symfony\Component\HttpKernel\Event\ResponseEvent;

    #[AsEventListener]
    class DownloadResponseListener
    {
        public function 
    __invoke(ResponseEvent $event): void
        
    {
            if (!
    $event->isMainRequest() || !($response $event->getResponse()) instanceof BinaryFileResponse) {
                return;
            }

            
    $file $response->getFile();

            
    // Do something …
        
    }

    Geändert von Spooky (07.12.2023 um 17:55 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    So zB.:
    PHP-Code:
    // src/EventListner/DownloadResponseListener.php
    namespace App\EventListener;

    use 
    Symfony\Component\EventDispatcher\Attribute\AsEventListener;
    use 
    Symfony\Component\HttpFoundation\BinaryFileResponse;
    use 
    Symfony\Component\HttpKernel\Event\ResponseEvent;

    #[AsEventListener]
    class DownloadResponseListener
    {
        public function 
    __invoke(ResponseEvent $event): void
        
    {
            if (!
    $event->isMainRequest() || !($response $event->getResponse()) instanceof BinaryFileResponse) {
                return;
            }

            
    $file $response->getFile();

            
    // Do something …
        
    }

    Vielen Dank!

    ich hab das jetzt direkt mal so getestet.
    Allerdings löst der Download das komischerweise nicht richtig aus. Also wenn ich innerhalb der if-Abfrage einen dump mache funktioniert das beim Laden der Seite. Außerhalb wird es aber nie ausgegeben. Also irgendiwie scheint das runterladen einer Datei im Downloads Element nicht das richtige Event auszulösen
    Geändert von Spooky (07.12.2023 um 16:16 Uhr)

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

    Standard

    Also ich hab es getestet und bei mir funktoniert es. Sowohl mit den alten Download(s) Inhaltselementen als auch den neuen.
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Also ich hab es getestet und bei mir funktoniert es. Sowohl mit den alten Download(s) Inhaltselementen als auch den neuen.
    Komisch, ich hab jetzt einfach mal ein neues Downloads-Element auf der Seite hinzugefügt und jetzt geht es, allerdings nicht beim alten Element. Aber vielen Dank!


    Da du hier ja der Profi bist
    Ich habe der tl_files ein Feld DownloadCounter hinzugefügt, dieses würde ich jetzt gerne in diesem EventListener hochzählen.

    Dafür hab ich die Klasse noch um
    Code:
    private $connection;
    
    public function __construct(Connection $connection)
      {
        $this->connection = $connection;
      }
    erweitert und dann in der invoke Funktion mal testweise ein
    Code:
    $dbResult = $this->connection->executeQuery('SELECT * FROM tl_files')->fetchAllAssociative();
    hinzugefügt. Das funktioniert auch soweit.

    Was ist da denn der beste Weg um nur den Datensatz der heruntergeladenen Datei zu laden und zu updaten?

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

    Standard

    $response->getFile() gibt dir ein Symfony\Component\HttpFoundation\File\File Objekt zurück. Damit kommst du an den absoluten Pfad. Den musst du nun zu einem relativen Pfad umwandeln, damit du damit den entsprechenden Eintrag aus tl_files suchen kannst. Dazu musst du dir den kernel.project_dir Parameter injecten und dann mit Hilfe von \Symfony\Component\Filesystem\Path::makeRelative($file->getPathname(), $this->projectDir); den relativen Pfad erzeugen, welchen du dann in deinem Datenbank Query nutzen kannst.
    » sponsor me via GitHub or PayPal or Revolut

  11. #11
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    $response->getFile() gibt dir ein Symfony\Component\HttpFoundation\File\File Objekt zurück. Damit kommst du an den absoluten Pfad. Den musst du nun zu einem relativen Pfad umwandeln, damit du damit den entsprechenden Eintrag aus tl_files suchen kannst. Dazu musst du dir den kernel.project_dir Parameter injecten und dann mit Hilfe von \Symfony\Component\Filesystem\Path::makeRelative($file->getPathname(), $this->projectDir); den relativen Pfad erzeugen, welchen du dann in deinem Datenbank Query nutzen kannst.
    Nice, das funktioniert soweit.
    Allerdings kapiere ich gerade nicht warum der EventListener nur manchmal ausgelöst wird. Jetzt grade passiert wieder einfach gar nichts wenn ich eine Datei runterlade. Das sollte doch eigentlich jedes Mal ausgelöst werden. Ich verstehe nicht wo der Unterschied liegen soll.

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

    Standard

    Debugge einfach mal was du bei $event->getResponse() für eine Response bekommst.
    » sponsor me via GitHub or PayPal or Revolut

  13. #13
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Ich bekomme für die ganzen Inhaltselemente auf der Seite je ein dump, aber wenn ich beim Downloads-Element eins herunterlade kommt nichts neues dazu.

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

    Standard

    Zitat Zitat von feG3 Beitrag anzeigen
    Ich bekomme für die ganzen Inhaltselemente auf der Seite je ein dump, aber wenn ich beim Downloads-Element eins herunterlade kommt nichts neues dazu.
    Wie lautet die Download URL und wo hast du den Dump genau eingefügt?
    » sponsor me via GitHub or PayPal or Revolut

  15. #15
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wie lautet die Download URL und wo hast du den Dump genau eingefügt?
    Ein Beispiel-Link: http://localhost/entdecken?_hash=%2F...%2F330x250.jpg


    Und mein Listener sieht gerade so aus:

    Code:
    <?php
    namespace App\EventListener;
    
    use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
    use Symfony\Component\HttpFoundation\BinaryFileResponse;
    use Symfony\Component\HttpKernel\Event\ResponseEvent;
    // use Symfony\Component\HttpFoundation\Request;
    // use Symfony\Component\HttpFoundation\Response;
    use Doctrine\DBAL\Connection;
    use Symfony\Component\HttpKernel\KernelInterface;
    
    #[AsEventListener]
    class DownloadResponseListener
    {
        private $connection;
        private $projectDir;
    
        public function __construct(Connection $connection, KernelInterface $kernel)
        {
            $this->connection = $connection;
            $this->projectDir = $kernel->getProjectDir();
        }
    
        public function __invoke(ResponseEvent $event): void
        {
            dump($event->getResponse());
            if (!($response = $event->getResponse()) instanceof BinaryFileResponse) {
                return;
            }
    
            
            $file = $response->getFile();
            dump($file);
            $relativePath = \Symfony\Component\Filesystem\Path::makeRelative($file->getPathname(), $this->projectDir);
            dump($relativePath);
            $dbResult = $this->connection->executeQuery('SELECT * FROM tl_files WHERE path=$?')->fetchAllAssociative($relativePath);
            dump($dbResult);
            
            die();
            
        }
    }

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

    Standard

    Das die() ist zu spät. Ändere dein erstes dump() auf dd() um.
    » sponsor me via GitHub or PayPal or Revolut

  17. #17
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das die() ist zu spät. Ändere dein erstes dump() auf dd() um.
    Dann bekomm ich einfach das erste Inhaltselement der Seite gedumpt.

    Code:
     Symfony\Component\HttpFoundation\Response {#1114 ?
      +headers: Symfony\Component\HttpFoundation\ResponseHeaderBag {#1115 ?
        #headers: array:3 [?
          "date" => array:1 [?
            0 => "Thu, 07 Dec 2023 14:21:59 GMT"
          ]
          "contao-merge-cache-control" => array:1 [?
            0 => "1"
          ]
          "x-powered-by" => array:1 [?
            0 => "PHP/8.2.0"
          ]
        ]
        #cacheControl: []
        #computedCacheControl: []
        #cookies: []
        #headerNames: array:3 [?
          "date" => "Date"
          "contao-merge-cache-control" => "Contao-Merge-Cache-Control"
          "x-powered-by" => "x-powered-by"
        ]
      }
      #content: """
            <div class="content-hub-filter">
          <ul>
            <!-- For filtering controls add -->
            <li data-filter="all"> Alle </li>
            <li data-filter="wirtschaft-unternehmen"> Wirtschaft & Unternehmen</li>
            <li data-filter="lage-infrastruktur"> Lage & Infrastruktur</li>
            <li data-filter="wohnen-leben"> Wohnen & Leben</li>
            <li data-filter="beruf-bildung"> Beruf & Bildung</li>
          </ul>
          
          <div class="dropdown-filter">
            <span class="filter-icon"></span>
            <select id="asset-type">
              <option value="all">Asset Typ</option>
              <option value="jpg">JPG</option>
              <option value="png">PNG</option>
              <option></option>
              <option></option>
            </select>
            <select id="topics">
              <option>Themen</option>
              <option></option>
              <option></option>
              <option></option>
              <option></option>
            </select>
             <select id="campain">
              <option>Kampagne</option>
              <option></option>
              <option></option>
              <option></option>
              <option></option>
            </select>
          </div>
        
        </div>
        """
      #version: "1.0"
      #statusCode: 200
      #statusText: "OK"
      #charset: null
    }

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

    Standard

    Zitat Zitat von feG3 Beitrag anzeigen
    Dann bekomm ich einfach das erste Inhaltselement der Seite gedumpt.
    Du musst zuerst die Seite im Frontend öffnen, dann das dd() einfügen und dann erst auf den Download Link klicken.

    Alles Teil von Echo Debugging 101

    Oder du nutzt xdebug bspw.
    » sponsor me via GitHub or PayPal or Revolut

  19. #19
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Also entweder bin ich zu blöd oder es geht nicht. Muss man nicht die Seite neu laden, damit das aktualisiert wird?

    Wenn ich es nach dem laden der Seite einfüge, passiert einfach gar nichts.

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

    Standard

    Zitat Zitat von feG3 Beitrag anzeigen
    Muss man nicht die Seite neu laden, damit das aktualisiert wird?
    Nein - du musst die Seite im Frontend aufrufen, dann dd() einfügen, dann auf den Download Link klicken.
    » sponsor me via GitHub or PayPal or Revolut

  21. #21
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Nein - du musst die Seite im Frontend aufrufen, dann dd() einfügen, dann auf den Download Link klicken.
    Ja, das hab ich so versucht. Die Datei wird heruntergeladen und es passiert sonst gar nichts.

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

    Standard

    Browser Cache vor dem Klick gelöscht? Debug-Modus aktiv?
    » sponsor me via GitHub or PayPal or Revolut

  23. #23
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Browser Cache vor dem Klick gelöscht? Debug-Modus aktiv?
    Hab's jetzt nochmal mit Entwickler-Konsole auf versucht und es geht. Allerdings bekomm ich trotzdem wieder nur das erste Inhaltselement ausgegeben

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

    Standard

    Ok - zum Verständnis jetzt mal genauer erklärt . Dieser Event Listener greift für alle Responses. Wenn du dort nun am Anfang ein dd() einfügst, dann gilt das natürlich auch für die Response, wenn du einfach nur die Seite im Frontend aufrufst. Du willst aber die Response des Download Requests debuggen. Daher darfst du das dd() erst einfügen, bevor du auf den Download Link klickst, nicht vorher.

    Und wie gesagt kannst du auch xdebug mit breakpoints, statt echo debugging einsetzen.
    » sponsor me via GitHub or PayPal or Revolut

  25. #25
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ok - zum Verständnis jetzt mal genauer erklärt . Dieser Event Listener greift für alle Responses. Wenn du dort nun am Anfang ein dd() einfügst, dann gilt das natürlich auch für die Response, wenn du einfach nur die Seite im Frontend aufrufst. Du willst aber die Response des Download Requests debuggen. Daher darfst du das dd() erst einfügen, bevor du auf den Download Link klickst, nicht vorher.
    Das hab ich so schon verstanden.
    Ich kommentiere das dd() aus -> Lade die Seite neu -> entferne den Kommentar -> Klicke auf den Link beim Downloads Element.

    Allerdings kommt dann entweder einfach gar ncihts und die Datei wird einfach runtergeladen, oder wie vorhin einmal kurz wo ich dann auf die http://localhost/entdecken?_hash=%2F...%2F330x250.jpg Seite weitergeleitet werde und da trotzdem nur das Inhaltselement ausgegeben wird

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

    Standard

    Zitat Zitat von feG3 Beitrag anzeigen
    Allerdings kommt dann entweder einfach gar ncihts und die Datei wird einfach runtergeladen
    Browser Cache gelöscht? Debug-Modus aktiv?
    » sponsor me via GitHub or PayPal or Revolut

  27. #27
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Browser Cache gelöscht? Debug-Modus aktiv?
    Ja und ja. Und dann werde ich wie gesagt weitergeleitet und da kommt trotzdem nur das Inhalts-Element statt der Datei.

    Bildschirmfoto 2023-12-07 um 16.08.22.jpg

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

    Standard

    Zitat Zitat von feG3 Beitrag anzeigen
    Ja und ja. Und dann werde ich wie gesagt weitergeleitet und da kommt trotzdem nur das Inhalts-Element statt der Datei.

    Bildschirmfoto 2023-12-07 um 16.08.22.jpg
    Du scheinst da noch ein anderes Fragment davor zu haben. Du könntest vor dem dd() noch ein
    PHP-Code:
    if (!$event->isMainRequest()) {
        return;

    einfügen.
    » sponsor me via GitHub or PayPal or Revolut

  29. #29
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du scheinst da noch ein anderes Fragment davor zu haben. Du könntest vor dem dd() noch ein
    PHP-Code:
    if (!$event->isMainRequest()) {
        return;

    einfügen.
    Jetzt kommt die Datei!!

    Komischerweise, wenn ich dd($file) mache, wird es korrekt ausgegeben.
    Wenn ich $dbResult ausgeben will (und das dd($file) davor natürlich rausnehme) kommt nix.

    Code:
     $file = $response->getFile();
            dd($file);
            $relativePath = \Symfony\Component\Filesystem\Path::makeRelative($file->getPathname(), $this->projectDir);
            $dbResult = $this->connection->executeQuery('SELECT * FROM tl_files WHERE path=?')->fetchAllAssociative($relativePath);
            dd($dbResult);

  30. #30
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Nvm, war wohl einfach ein Fehler drin. Hab den Datenbank Code angepasst und jetzt geht es. Hallelujah

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

    Standard

    Unabhängig von deinem Problem würde ich eher folgenden Code nutzen:
    PHP-Code:
    $filesRecord $this->connection->fetchAssociative("SELECT * FROM tl_files WHERE path = ?", [$relativePath]); 
    Darüberhinaus solltest du noch ein early out einbauen für den Fall, dass der Dateipfad nicht mit dem Parameter contao.upload_path beginnt ("files"). Weil solche Responses kann es ja auch für Dateien außerhalb von files/ geben.
    » sponsor me via GitHub or PayPal or Revolut

  32. #32
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Unabhängig von deinem Problem würde ich eher folgenden Code nutzen:
    PHP-Code:
    $filesRecord $this->connection->fetchAssociative("SELECT * FROM tl_files WHERE path = ?", [$relativePath]); 
    Das ist wirklich besser. Ich hatte es zwischendurch auf
    Code:
    $sql = "SELECT * FROM tl_files WHERE path='" . $relativePath ."'";
    $dbResult = $this->connection->executeQuery($sql)->fetchAllAssociative();
    geändert, aber da ist deins deutlich einfacher.

    Was würdest du dann für ein UPDATE benutzen?
    Ich habe es gerade noch so umgesetzt:
    Code:
    $newsql = "UPDATE tl_files SET downloadCounter ='" .$newCounter. "'" ." WHERE path='" . $relativePath ."'";
    $dbResult = $this->connection->executeQuery($newsql);

    Zitat Zitat von Spooky Beitrag anzeigen
    Darüberhinaus solltest du noch ein early out einbauen für den Fall, dass der Dateipfad nicht mit dem Parameter contao.upload_path beginnt ("files"). Weil solche Responses kann es ja auch für Dateien außerhalb von files/ geben.
    Guter Hinweis, vielen Dank!! Wie kann ich den contao.upload_path denn abfragen?

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

    Standard

    Zitat Zitat von feG3 Beitrag anzeigen
    Was würdest du dann für ein UPDATE benutzen?
    PHP-Code:
    $this->connection->update(


    Zitat Zitat von feG3 Beitrag anzeigen
    Wie kann ich den contao.upload_path denn abfragen?
    Genau so injecten wie kernel.project_dir. Für die Prüfung kannst du dann Path::isBasePath nutzen.
    Geändert von Spooky (07.12.2023 um 17:56 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

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

    Standard

    So ein Zufall, hatte vor Kurzem die selben Probleme mit meiner dlstats (Download Statistik) Erweiterung die ich auf Contao 5 portieren wollte.
    Werde mal den hier beschriebenen Weg benutzen, mal sehen ob das auch bei mir geht.


    Sowohl mit den alten Download(s) Inhaltselementen als auch den neuen.
    Hab ich da was verpasst? Gibts da was neues?
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

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

    Standard

    Zitat Zitat von BugBuster Beitrag anzeigen
    Hab ich da was verpasst? Gibts da was neues?
    Ja, in Contao 5 sind (fast) alle Inhaltselemente als Fragments umgesetzt, also im neuen Weg. Siehe https://github.com/contao/contao/blo...ntent-elements
    » sponsor me via GitHub or PayPal or Revolut

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

    Standard

    Achso das, ja das habe ich schon gelesen.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  37. #37
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ja, in Contao 5 sind (fast) alle Inhaltselemente als Fragments umgesetzt, also im neuen Weg. Siehe https://github.com/contao/contao/blo...ntent-elements
    Ist das auch der Grund warum man nicht mehr die html5 Templates anpassen kann sondern sich an den Twig Templates vergehen muss?

    Edit: Wer lesen kann ist klar im Vorteil, steht ja in dem Link.
    Geändert von feG3 (08.12.2023 um 08:56 Uhr)

  38. #38
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    PHP-Code:
    $this->connection->update(


    Genau so injecten wie kernel.project_dir. Für die Prüfung kannst du dann Path::isBasePath nutzen.
    Das mit dem Update hat funktioniert.

    Das injecten noch nicht so. Ich finde nirgends Informationen dazu welche Komponenten ich dafür wie einbinden muss.

  39. #39
    Contao-Nutzer
    Registriert seit
    24.11.2023.
    Beiträge
    41

    Standard

    Zitat Zitat von feG3 Beitrag anzeigen
    Das injecten noch nicht so. Ich finde nirgends Informationen dazu welche Komponenten ich dafür wie einbinden muss.

    Hab das jetzt so abgeändert:

    Code:
    public function __construct(Connection $connection)
        {
            $this->connection = $connection;
            $this->projectDir = \Contao\System::getContainer()->getParameter('kernel.project_dir');
            $this->uploadPath = \Contao\System::getContainer()->getParameter('contao.upload_path');
        }
    Ist das so die beste Lösung oder gibt's da nen besseren Weg?

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

    Standard

    PHP-Code:
    class DownloadResponseListener
    {
        public function 
    __construct(
            private 
    readonly string $projectDir,
            private 
    readonly string $uploadPath,
        ) {
            
        }

    PHP-Code:
    # config/services.yaml
    services:
        
    _defaults:
            
    autowiretrue
            autoconfigure
    true
            bind
    :
                
    $projectDir'%kernel.project_dir%'
                
    $uploadPath'%contao.upload_path%'

        
    App\:
            
    resource: ../src 
    » sponsor me via GitHub or PayPal or Revolut

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •