Bester Weg, um die Matrizenfunktion zu ersetzen?

7

Ich habe den folgenden Magento-Code:

protected function _sendUploadResponse($fileName, $content, $contentType='application/octet-stream')
{
    $response = $this->getResponse();
    $response->setHeader('HTTP/1.1 200 OK','');
    $response->setHeader('Pragma', 'public', true);
    $response->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true);
    $response->setHeader('Content-Disposition', 'attachment; filename='.$fileName);
    $response->setHeader('Last-Modified', date('r'));
    $response->setHeader('Accept-Ranges', 'bytes');
    $response->setHeader('Content-Length', strlen($content));
    $response->setHeader('Content-type', $contentType);
    $response->setBody($content);
    $response->sendResponse();
    die;
}

Wenn ich versuche, meinen Code zu validieren, tritt folgender Fehler auf: Von der Verwendung des Sprachkonstrukts wird abgeraten.

Was kann ich tun oder wie kann ich die Matrizenfunktion am besten ersetzen?

Robert
quelle
Zur Vollständigkeit der Informationen: Wo / wie validieren Sie Ihren Code?
7ochem

Antworten:

8

Es kommt darauf an, wo sich dieser Code befindet:

  1. In einem Controller oder Beobachter nach dem Versand?

    Dann müssen Sie die Antwort nicht senden und selbst beenden. Magento wird sich darum kümmern. Also statt

    $response->sendResponse();
    die;
    

    Rückkehr von der Aktion oder Beobachter:

    return;

    Wenn Sie Beobachter nach dem Versand (in einem Controller) verhindern wollten, können Sie dies tun, indem Sie zusätzlich Folgendes anrufen:

    $this->setFlag('', self::FLAG_NO_POST_DISPATCH, 1);
  2. In einem Beobachter vor dem Versand?

    Ähnlich wie oben möchten Sie verhindern, dass der eigentliche Controller versendet wird:

    $controller->setFlag('', self::FLAG_NO_DISPATCH, 1);

    Und vielleicht auch die Beobachter nach dem Versand:

    $controller->setFlag('', self::FLAG_NO_POST_DISPATCH, 1);
  3. Irgendwo anders?

    Das ist ein Problem. Der Umgang mit Anfragen und Antworten ist Aufgabe des Controllers (und der Beobachter, die an Controller-bezogene Ereignisse gebunden sind). Der beste Weg wäre also herauszufinden, wie man diesen Code verschiebt.

Fabian Schmengler
quelle