Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Using macros to implement custom response types in Laravel - www.slashnode.com
<?php
Response::macro('csv', function($data, $filename = 'data.csv', $status = 200, $delimiter = "|", $linebreak = "\n", $headers = array())
{
return Response::stream(function () use ($data, $delimiter, $linebreak) {
foreach ($data as $row) {
$keys = array(); $values = array();
$i = (isset($i)) ? $i+1 : 0;
foreach ($row as $k => $v) {
if (!$i) $keys[] = is_string($k) ? '"' . str_replace('"', '""', $k) . '"' : $k;
$values[] = is_string($v) ? '"' . str_replace('"', '""', $v) . '"' : $v;
}
if (count($keys) > 0) echo implode($delimiter, $keys) . $linebreak;
if (count($values) > 0) echo implode($delimiter, $values) . $linebreak;
}
}, 200, array_merge(array(
'Content-type' => 'application/csv',
'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0',
'Content-Description' => 'File Transfer',
'Content-type' => 'text/csv',
'Content-Disposition' => 'attachment; filename=' . $filename,
'Expires' => '0',
'Pragma' => 'public',
), $headers));
});
Route::get('users', function () {
$users = Acme\Models\Users::all();
return Response::csv($users);
});
@mosufy

This comment has been minimized.

Copy link

mosufy commented Oct 16, 2014

Thanks for this! Need to do a few tweaks though for my case

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.