2017-11-15 2 views
1

Ich benutze CakePHP 3.4+ für meine Anwendung.Wie kann ich lokale Datei vom Controller in CakePHP herunterladen 3

Es gibt eine XML-Datei im lokalen Pfad, die beim Klicken auf den Link heruntergeladen werden muss. Ich mag nach der Überprüfung einiger Anforderungen Download von Controller-Aktion zurück nach meiner Anwendung

public function downloadXml() 
{ 
    if ($this->_checkMembership()) { 
     try { 
      // file path /webroot/agency/data.xml 
      $xmlLink = WWW_ROOT . 'agency/data.xml'; 

      $this->response->withFile($xmlLink, [ 
       'download' => true, 
       'name' => 'data.xml', 
      ]); 
      return $this->response; 
     } catch (NotFoundException $e) { 
      $this->Flash->error('Requested file not found. Try again'); 
      return $this->redirect(['action' => 'index']); 
     } 
    } 
} 

Und in Vorlage

<?= $this->Html->link(
     __('Download the site'), 
     [ 
      'action' => 'downloadXml' 
     ], 
) ?> 

Aber das zeigt nur eine leere Seite auf Klicken auf den Link

Antwort

3

Die Antwortmethoden with* werden mit dem PSR-7-Immutabilitätsmuster implementiert, dh sie geben ein neues Objekt zurück, anstatt das aktuelle zu ändern. Sie müssen das neu erstellte Objekt zurück:

return $this->response->withFile($xmlLink, [ 
    'download' => true, 
    'name' => 'data.xml', 
]); 

Wenn Sie nicht eine eigene Antwort zurück waren, das heißt, wenn Sie eine Ansicht statt Zurückgeben eines Antwortobjekt machen würde wollte, dann würden Sie müssen neu zuweisen das neue Objekt zu $this->response, um Änderungen anzuwenden.

+0

Geht man von meinen Kommentaren, ich hatte bereits einen Blick auf sie ... – ndm

Verwandte Themen