Laravel Middleware:调用数组上的成员函数header()

时间:2017-05-03 08:02:06

标签: php laravel header middleware

在我的项目中有两个级别的中间件。

一个UserAuthentication,另一个是PermissionsMiddleWare。

假设有一条路线:

Route::group(['middleware' => ['myauth', 'revalidate'], 'prefix' => '/user'], function () {
    Route::group(['middleware' => 'permissions:Campaigns'], function () {
      Route::resource('/dashboard', 'UserController@dashboard');
    }
}

现在在UserAuthenticationMiddleware中:

     <?php
public function handle($request, Closure $next)
{
    if ($request->session()->has('user_id')) {
        $user_id = $request->session()->get('user_id');
    } else {
        return redirect('loginUser');
    }

    $response = $next($request);
    return $response->header('Cache-Control', 'nocache, no-store, max-age=0, must-revalidate')
            ->header('Pragma', 'no-cache')
            ->header('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT');

    return $next($request);
}

在PermissionsMiddleware中:

<?php
public function handle(Request $request, Closure $next, $permission_name = "")
{
//login to get permission decision
    if (!$decision) {
// **Old process** of response
// return redirect('user/accessRejected')->with('message', 'Request rejected');
// **New process** of response
        return ['accessRejected' => true, 'message' => 'Request rejected'];
    }


    $response = $next($request);
    return $response->header('Cache-Control', 'nocache, no-store, max-age=0, must-revalidate')
            ->header('Pragma', 'no-cache')
            ->header('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT');

    return $next($request);
}

旧流程工作正常,权限中间件正在限制并重定向到页面。

现在,因为这是项目的API方面,所以我无法重定向到另一个页面,而是需要以JSON或数组格式进行响应。

在遵循新的回复流程时,我收到此错误:

FatalErrorException in UserAuthenticationMiddleware.php line (this below code line):
-> return $response->header('Cache-Control','nocache, no-store, max-age=0, must-revalidate')
            ->header('Pragma','no-cache')
            ->header('Expires','Fri, 01 Jan 1990 00:00:00 GMT');
Call to a member function header() on array

请详细说明我的代码中的错误。

1 个答案:

答案 0 :(得分:1)

我们可以使用返回响应数据而不是仅返回数据。像这样:

return response(['accessRejected'=> true, 'message'=>'Request rejected reason:' . $this->checkPermission]);       
 }

然后我们可以正确得到答案。