Skip to content

$response.addContent

Description

Crée ou ajoute du contenu au buffer de réponse. La méthode supporte les données texte (via une valeur string) et les données binaires (via un objet file) mais pas un mix des deux. Il n'est en effet pas permis d'écrire des données textuelles puis d'y ajouter des données binaires. Il n'est pas non plus permis d'ajouter des données binaires si la réponse en contient déjà. En fait seules les données texte peuvent être complétées.

Les éléments d'en-tête de la réponse (status, headers (dont le content-type), etc.) doivent être définis avant l'ajout de données dans le buffer de réponse car il n'est plus possible de modifier ces éléments une fois que l'on envoie des données dans le buffer, à moins d'invalider le buffer au moyen de la méthode $response.reset.

Syntaxe

$response.addContent( content [ , options ] )

Paramètres

content string / file / map / array

Donnée à inscrire dans ou à ajouter au buffer.

Dans le cas où la donnée est un map ou un array, la méthode génère et envoie une représentation json de l'objet à la response. Elle se charge également de renseigner le content-type avec la valeur application/json, pour autant que l'option contentType ne soit pas définie et qu'aucun content-type n'ait été défini pour la réponse (par exemple via $response.setContentType.

Dans le cas où la donnée est un fichier, la méthode se charge de renseigner les headers Content-Type et Content-Disposition à partir des métadonnées du fichier si les options correspondantes ne sont pas spécifiées ou que ces éléments n'ont pas été préalablement renseignés au niveau de la réponse directement (via les méthodes $response.setContentType, $response.setContentDisposition, $response.setHeader ou $response.setHeaders).

options map

Map d'options dépendant du type de contenu. Les options reconnues sont:

contentDisposition string

Mode du header Content-Disposition. La propriété peut prendre la valeur inline ou attachment (avec ou sans filename).

Si l'option n'est pas spécifiée et qu'aucun content-disposition n'est défini au niveau de la réponse, la méthode se charge de renseigner le header en fonction du type de contenu.

contentType string

Valeur du Content-Type à reprendre dans la réponse.

Si l'option n'est pas spécifiée et qu'aucun content-type n'est défini au niveau de la réponse, la méthode se charge de renseigner le header en fonction du type de contenu.

Retour

Retourne toujours null.

Exemples

L'exemple ci-dessous retourne une représentation json d'un map.

1
2
3
4
$response.addContent({
  foo: 1,
  bar: "xyz"
});

L'exemple ci-dessous construit une réponse qui retourne un code HTTP 500 avec le texte de la dernière erreur retournée par le moteur.

1
2
3
$response.setStatus(500);
$response.setContentType("text/plain; charset=utf-8");
$response.addContent($script.getLastError());

Exemple de création et d'envoi d'un fichier Excel dans la réponse :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
var filename = $uuid.get() & ".xlsx",
    destfile = $file.load($app.getWorkDirectory() & filename),
    workbook = $excel.create();

try {
    var sheet = $excel.addSheet(workbook, "exemple");
    $excel.setValue(workbook, { sheet: sheet, cell: "A1", value: 1 });

    $excel.autosize(workbook, { sheet: sheet, columns: "1-*" });
    $excel.save(workbook, destfile);

    $response.setStatus(200);
    $response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    $response.setContentDisposition(`attachment; filename="${filename}"`);
    $response.addContent(destfile);
}
finally {
    $excel.close(workbook);
}