BinaryFileResponse in Laravel undefined
You may want to exclude headers or set different headers for file
download requests by checking the header
method exists in the returned Closure
.
File download requests typically have the header
method omitted from Closure
.
public function handle($request, Closure $next)
{
$handle = $next($request);
if(method_exists($handle, 'header'))
{
$handle->header('Access-Control-Allow-Origin' , '*')
->header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE')
->header('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With, Application');
}
return $handle;
}
If you need to set headers for a file
request (as other answer suggested) $handle->headers->set()
can be used in an else
condition:
public function handle($request, Closure $next)
{
$handle = $next($request);
if(method_exists($handle, 'header'))
{
// Standard HTTP request.
$handle->header('Access-Control-Allow-Origin' , '*');
return $handle;
}
// Download Request?
$handle->headers->set('Some-Other-Header' , 'value')
return $handle;
}
The problem is that you're calling ->header()
on a Response
object that doesn't have that function (the Symfony\Component\HttpFoundation\BinaryFileResponse
class). The ->header()
function is part of a trait that is used by Laravel's Response class, not the base Symfony Response.
Fortunately, you have access to the headers
property, so you can do this:
$response = $next($request);
$response->headers->set('Access-Control-Allow-Origin' , '*');
$response->headers->set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE');
$response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With, Application');
return $response;