2016-08-24 5 views
0

내 모든 코드가 Laravel 5.2에서 작업 중입니다. 이제 Laravel 5.3으로 업그레이드하려고 시도합니다. 미들웨어가 깨졌습니다.Laravel 5.3 미들웨어 요청 병합 반환 값 없음

// Verify Middleware 
public function handle($request, Closure $next) 
{ 
    // I already make sure the data is exists 
    $user = User::find('abc'); 

    if (!$user) { 
     return responseHandler()->unauthorized('Unauthorized'); 
    } 

    $request->merge(['user_id' => $user->id, 'device' => $device]); 

    return $next($request); 
} 

// User Controller 
public function __construct(Request $request) 
{ 
    var_dump($request->all()); 
    $this->user_id = $request->user_id; 
    $this->device = $request->device; 
} 

public function getProfile(Request $request) 
{ 
    $data = User::find($this->user_id); 

    $result = Fractal::item($data, new UserTransformer)->getArray(); 

    return responseHandler()->success(0, $result, 'user'); 
} 

문제는 $this->user_id은 항상 null입니다. 하지만 getProfile 함수에서 요청하면 올바르게 반환됩니다.

var_dump 결과는 로그인 정보입니다. 미들웨어로부터 병합 요청을받지 못했습니다.

Laravel 5.2에서이 코드가 올바르게 작동합니다. 어떤 해결책?

답변

1

기준 - 요청 개체와 세션을 호출 할 수 있습니다 https://www.laravel.com/docs/5.3/upgrade#upgrade-5.3.0

세션을 생성자

에서 Laravel의 이전 버전에서는 세션 변수에 액세스 할 수 있습니다 또는 컨트롤러의 생성자에서 인증 된 사용자. 이것은 결코 프레임 워크의 명백한 특징이되는 것은 아닙니다. Laravel 5.3에서는 미들웨어가 아직 실행되지 않았기 때문에 컨트롤러의 생성자에서 세션이나 인증 된 사용자에게 액세스 할 수 없습니다.

대신 컨트롤러 생성자에서 클로저 기반 미들웨어를 직접 정의 할 수 있습니다. 이 기능을 사용하기 전에, 응용 프로그램이 Laravel 5.3.4 실행 중이거나 위의 것이 있는지 확인하십시오

<?php 

    namespace App\Http\Controllers; 
    use App\User; 
    use Illuminate\Support\Facades\Auth; 
    use App\Http\Controllers\Controller; 

class ProjectController extends Controller 
{ 
/** 
* All of the current user's projects. 
*/ 
protected $projects; 

/** 
* Create a new controller instance. 
* 
* @return void 
*/ 
public function __construct() 
{ 
    $this->middleware(function ($request, $next) { 
     $this->projects = Auth::user()->projects; 

     return $next($request); 
    }); 
} 

} 물론

, 당신은 또한하여 요청 세션 데이터 또는 인증 된 사용자에 액세스 할 수있는 타입 힌트 컨트롤러 동작에서 \ Http \ Request 클래스를 켜십시오.

0

미들웨어가 아직 실행되지 않아 컨트롤러 생성자에서 세션 데이터에 액세스 할 수없는 것 같습니다.

는 미들웨어가 아직 실행되지 않았기 때문에 당신이 당신의 컨트롤러의 생성자에서 세션 또는 인증 된 사용자에 액세스 할 수 없습니다 laravel 변경 로그 here

를 참조하십시오. 귀하의 경우에는

당신이

public function getProfile(Request $request) 
{ 
    $data = User::find($request->session()->get('user_id')); 

    $result = Fractal::item($data, new UserTransformer)->getArray(); 

    return responseHandler()->success(0, $result, 'user'); 
}