Visão CSV


1Apresentação

A visão CSV permite enviar arquivos CSV feitos a partir de dados PHP.

Por padrão, trata-se de um fluxo simples (assim como na visão JSON) mas, opcionalmente, é possível especificar um nome de arquivo. O CSV será então enviado ao navegador com instruções para tratá-lo como um anexo e oferecer ao usuário a opção de salvá-lo em disco com o nome de arquivo em questão.


2Uso

Aqui está um exemplo de envio de dados em formato CSV:

class ApiController extends \Temma\Web\Controller {
    public function getUsers() {
        // gravação dos dados que serão enviados
        // no fluxo CSV
        $this['csv'] = [
            ['name', 'age', 'size'],
            ['Alice', 38, 162],
            ['Bob', 25, 184],
            ['John Doe', 31, 176],
        ];
        // define o nome do arquivo (opcional)
        $this['filename'] = 'userlist.csv';

        // define a visão usada
        $this->_view('\Temma\Views\Csv');
    }
}
  • Linhas 5 a 10: Os dados a serem enviados no fluxo CSV são definidos ao serem atribuídos à variável csv.
  • Linha 12: Definimos o nome do arquivo CSV (para que ele seja tratado como um anexo) atribuindo-o à variável filename.
  • Linha 15: Especificamos que a visão a ser usada para os dados de saída é a visão CSV (e não a visão Smarty usual).

Observação: A visão CSV obviamente não precisa de templates, já que são os dados PHP que são diretamente serializados.

Os dados recebidos terão esta aparência:

name,age,size
Alice,38,162
Bob,25,184
"John Doe",31,176
Também é possível transmitir os dados a exportar usando a variável de template @output em vez da variável csv. Se @output estiver definida, ela tem prioridade.

3Separador

Por padrão, a visão separa os campos no fluxo CSV gerado usando o caractere vírgula (,). É possível usar outro caractere passando-o na variável de template $separator.

Aqui está um exemplo usando ponto e vírgula:

class ApiController extends \Temma\Web\Controller {
    public function getUsers() {
        // gravação dos dados que serão enviados
        // no fluxo CSV
        $this['csv'] = [
            ['name', 'age', 'size'],
            ['Alice', 38, 162],
            ['Bob', 25, 184],
            ['John Doe', 31, 176],
        ];
        // define o nome do arquivo (opcional)
        $this['filename'] = 'userlist.csv';

        // define o separador
        $this['separator'] = ';';

        // define a visão usada
        $this->_view('\Temma\Views\Csv');
    }
}

Os dados recebidos terão esta aparência:

name;age;size
Alice;38;162
Bob;25;184
"John Doe";31;176