Vue CSV


1Présentation

La vue CSV permet d'envoyer des fichiers CSV constitués à partir de données PHP.

Par défaut, il s'agit d'un simple flux (comme pour la vue JSON) mais, de manière optionnelle, il est possible de spécifier un nom de fichier. Le CSV sera alors envoyé au navigateur avec des instructions l'incitant à le traiter comme une pièce-jointe et à proposer à l'utilisateur de l'enregistrer sur le disque avec le nom de fichier en question.


2Utilisation

Voici un exemple de d'envoi de données au format CSV :

class ApiController extends \Temma\Web\Controller {
    public function getUsers() {
        // enregistrement des données qui vont être
        // envoyées dans le flux CSV
        $this['csv'] = [
            ['name', 'age', 'size'],
            ['Alice', 38, 162],
            ['Bob', 25, 184],
            ['Anne Honyme', 31, 176],
        ];
        // définition du nom du fichier (optionnel)
        $this['filename'] = 'userlist.csv';

        // définition de la vue à utiliser
        $this->_view('\Temma\Views\Csv');
    }
}
  • Lignes 5 à 10 : Les données à envoyer dans le flux CSV sont définies en les affectant à la variable csv.
  • Ligne 12 : On définit le nom du fichier CSV (pour qu'il soit traité comme une pièce-jointe) en l'assignant à la variable filename. Ce paramètre est optionnel.
  • Ligne 15 : On spécifie que la vue à utiliser pour les données sortantes est la vue CSV (et non pas la vue Smarty habituelle).

À noter : La vue CSV n'a évidemment pas besoin de templates, dans la mesure où ce sont les données PHP qui sont directement sérialisées.

Les données reçues ressembleront à cela :

name,age,size
Alice,38,162
Bob,25,184
"Anne Honyme",31,176

3Séparateur

Par défaut, la vue sépare les champs dans le flux CSV généré en utilisant le caractère virgule (,). Il est possible d'utiliser un autre caractère en le passant dans la variable de template $separator.

Voici un exemple qui utilise le point-virgule :

class ApiController extends \Temma\Web\Controller {
    public function getUsers() {
        // enregistrement des données qui vont être
        // envoyées dans le flux CSV
        $this['csv'] = [
            ['name', 'age', 'size'],
            ['Alice', 38, 162],
            ['Bob', 25, 184],
            ['Anne Honyme', 31, 176],
        ];
        // définition du nom du fichier (optionnel)
        $this['filename'] = 'userlist.csv';

        // définition du séparateur
        $this['separator'] = ';';

        // définition de la vue à utiliser
        $this->_view('\Temma\Views\Csv');
    }
}

Les données reçues ressembleront à cela :

name;age;size
Alice;38;162
Bob;25;184
"Anne Honyme";31;176