Vista CSV
1Presentación
La vista CSV permite enviar archivos CSV generados a partir de datos PHP.
Por defecto, se trata de un simple flujo (igual que en la vista JSON) pero, opcionalmente, es posible especificar un nombre de archivo. El CSV se enviará entonces al navegador con instrucciones para tratarlo como un adjunto y ofrecer al usuario guardarlo en disco con el nombre de archivo indicado.
2Uso
Aquí tienes un ejemplo de envío de datos en formato CSV:
class ApiController extends \Temma\Web\Controller {
public function getUsers() {
// registro de los datos que se enviarán
// en el flujo CSV
$this['csv'] = [
['name', 'age', 'size'],
['Alice', 38, 162],
['Bob', 25, 184],
['John Doe', 31, 176],
];
// define el nombre del archivo (opcional)
$this['filename'] = 'userlist.csv';
// define la vista usada
$this->_view('\Temma\Views\Csv');
}
}
- Líneas 5 a 10: Los datos que se enviarán en el flujo CSV se definen asignándolos a la variable csv.
- Línea 12: Definimos el nombre del archivo CSV (para que se trate como un adjunto) asignándolo a la variable filename.
- Línea 15: Especificamos que la vista que se debe usar para los datos de salida es la vista CSV (y no la vista Smarty habitual).
Nota: La vista CSV obviamente no necesita templates, ya que son los datos PHP los que se serializan directamente.
Los datos recibidos tendrán este aspecto:
name,age,size
Alice,38,162
Bob,25,184
"John Doe",31,176
3Separador
Por defecto, la vista separa los campos en el flujo CSV generado usando el carácter coma (,). Es posible usar otro carácter pasándolo en la variable de template $separator.
Aquí tienes un ejemplo usando punto y coma:
class ApiController extends \Temma\Web\Controller {
public function getUsers() {
// registro de los datos que se enviarán
// en el flujo CSV
$this['csv'] = [
['name', 'age', 'size'],
['Alice', 38, 162],
['Bob', 25, 184],
['John Doe', 31, 176],
];
// define el nombre del archivo (opcional)
$this['filename'] = 'userlist.csv';
// define el separador
$this['separator'] = ';';
// define la vista usada
$this->_view('\Temma\Views\Csv');
}
}
Los datos recibidos tendrán este aspecto:
name;age;size
Alice;38;162
Bob;25;184
"John Doe";31;176