2016-08-24 10 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

Reference-要求オブジェクトとのセッションを呼び出すことができます。https://www.laravel.com/docs/5.3/upgrade#upgrade-5.3.0

セッションをコンストラクタ

でLaravelの以前のバージョンでは、セッション変数にアクセスすることができましたまたはコントローラのコンストラクタで認証されたユーザ。これは決してフレームワークの明白な特徴ではありません。 Laravel 5.3では、ミドルウェアがまだ実行されていないため、コントローラのコンストラクタでセッションまたは認証されたユーザにアクセスすることはできません。

代わりに、コントローラのコンストラクタでClosureベースのミドルウェアを直接定義することもできます。

もちろん
<?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); 
    }); 
} 

}

、あなたはまた、タイプヒンティングによって要求セッションデータや認証されたユーザーにアクセスすることができます。この機能を使用する前に、アプリケーションはLaravel 5.3.4を実行している以上であることを確認してくださいあなたのコントローラーの操作で\ 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'); 
} 
関連する問題