laravel-excel 導出跨域報錯

這裏就省略laravel-excel的流程了
如果啓動了跨域的話;導出功能會報錯:Call to undefined method Symfony\Component\HttpFoundation\Response::header()
解決辦法如下:
在中間件根據請求類去用不同的header 方法

const ILLUMINATE_RESPONSE = 'Illuminate\Http\Response';
const SYMFONY_RESPONSE = 'Symfony\Component\HttpFoundation\Response';

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request $request
 * @param  \Closure $next
 * @return mixed
 */
public function handle($request, Closure $next)
{
    $response = $next($request);
    $origin = $request->server('HTTP_ORIGIN') ? $request->server('HTTP_ORIGIN') : '*';
    $headers = [
        'Access-Control-Allow-Origin' => $origin,
        'Access-Control-Allow-Headers' => 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Authorization , Access-Control-Request-Headers, X-CSRF-TOKEN',
        'Access-Control-Expose-Headers' => 'Authorization, authenticated',
        'Access-Control-Allow-Methods' => 'GET, POST, PATCH, PUT, DELETE, OPTION',
        'Access-Control-Allow-Credentials' => 'true'
    ];

    $IlluminateResponse = self::ILLUMINATE_RESPONSE;
    $SymfonyResponse = self::SYMFONY_RESPONSE;

    switch ($response) {
        // 普通的http請求
        case ($response instanceof $IlluminateResponse) :
            foreach ($headers as $key => $value) {
                $response->header($key, $value);
            }
            break;
        // laravel-excel
        case ($response instanceof $SymfonyResponse):
            foreach ($headers as $key => $value) {
                $response->headers->set($key, $value);
            }
            break;
    }

    return $response;
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章