John Davidson

php - ERR_INVALID_RESPONSE generate csv file from controller laravel

0 comments
Message:


I'm trying to generate csv file from the controller


 public function generateStaffcsv(Request $request, $id)
{

$listing = StaffListing::with('trainings')->find($id);
$training_videos = StaffTrainingVideos::all();
$training_ids = [];
for ($i=0; $i < count($listing->trainings); $i++) {
$training = $listing->trainings[$i];
$training_ids[$training->training_id] = [
'id' => $training->training_id,
'status' => $training->status,
];
}

$filename = 'training-'.strtoupper(str_random(6)).'.csv';
$headers = array(
"Content-type" => "text/csv; charset=utf-8",
"Content-Disposition" => "attachment; filename=$filename",
"Pragma" => "no-cache",
"Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
"Expires" => "0"
);

$columns = array('training_description', 'training_status', 'quiz_status');

$callback = function() use ($training_videos, $columns)
{
$file = fopen('php://output', 'w');
fputcsv($file, $columns);

foreach($training_videos as $training) {
if(array_key_exists($training->id,$training_ids)){
if(isset($training_ids[$training->id])){
$training_status = $training_ids[$training->id]['status'] == 1 ? 'Ongoing' : ( $training_ids[$training->id]['status'] == 2 ? 'Completed' : '' );
$quiz_status = $training_ids[$training->id]['status'] == 1 ? 'Not completed' : ( $training_ids[$training->id]['status'] == 2 ? 'Completed' : '' );

fputcsv($file, array($training->name,$training_status,$quiz_status));
}
}
}
fclose($file);


};

return \Response::stream($callback, 200, $headers);
}

My codes seems confusing but I just trying to generate training status of a staff*


I tried to use dd(); just to make sure if my codes is working


just like this


dd($callback);
return \Response::stream($callback, 200, $headers);

and I got this result



and if I removed dd


ERR_INVALID_RESPONSE will show up


Here's my blade code


   <form method="POST" action="{{ route('generateStaffcsv', $staffID) }}" enctype="multipart/form-data">
@csrf
<button style="width: 300px; float:right;" type="submit" name="generate_csv" class="btn btn--primary">Generate CSV</button>
</form>

I'm guessing that there's something wrong with my response code or headers


because when I used dd(); there's no error detected on the above codes, only on response codes



My Answer:
>find($id);

$filename = 'staff_' . $listing->name . '.csv';

$headers = array(
"Content-type" => "text/csv",
"Content-Disposition" => "attachment; filename=$filename",
"Pragma" => "no-cache",
"Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
"Expires" => "0"
);

$handle = fopen('php://output', 'w');
fputcsv($handle, array('Name', 'Email', 'Phone', 'Training'));

foreach ($listing->trainings as $training) {
fputcsv($handle, array($listing->name, $listing->email, $listing->phone, $training->name));
}

fclose($handle);

return response()->stream(function () use ($handle) {
fclose($handle);
}, 200, $headers);
}

Rate this post

4 of 5 based on 2821 votes

Comments




© 2024 Hayatsk.info - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us