2016-12-17 7 views
2

私はredirect()メソッドを使用してユーザーをリダイレクトする方法を理解していますが、このメソッドは302コードを返し、ブラウザは2回目のHTTP要求を行わなければなりません。要求を内部的に別のコントローラとアクションに転送することは可能ですか?Laravel 5.3で内部リダイレクトを実行する方法

私のハンドル機能は、次のようになりますので、私はミドルウェアで、このチェックをやっている:

public function handle($request, Closure $next) 
    { 
    if (auth()->user->age <= 20) { //example 
     //internally forward the user to a different [email protected] 
    } 

    return $next($request); 
    } 

} 

答えて

3

あなたにcallメソッドを使用することができますので、

app()->call('App\Http\Controllers\[email protected]') 

それとも

app('App\Http\Controllers\ControllerName')->funName(); 

ミドルウェアは次のようになります:

あなたはこのよう redirect()ヘルパーメソッドを使用することができます
if (auth()->user->age <= 20) { 
    return app()->call('App\Http\Controllers\[email protected]'); 
} 
+0

これを行うと、「nullのメンバ関数setCookie()を呼び出す」というエラーが発生します。 ( 'message' => '???'、 'code' => '???'、 'severity' => '???'、 'filename')を指定すると、 => '???'、 'lineno' => '???'、 'traceOffset' => '???'、 'traceArgs' => '???'、 'trace' => '??? ')in HandleExceptions.php 133 at HandleExceptions-> fatalExceptionFromError(' error '=>' ??? '、' traceOffset '=>' ??? ')HandleExceptions.phpの行118 at HandleExceptions-> handleShutdown )in HandleExceptions.php line 0 – asolberg

-1

:あなたのroutesファイル内

public function handle($request, Closure $next) 
{ 
    if (auth()->user->age <= 20) { //example 
     return redirect()->route('some_route_name'); 
    } 

    return $next($request); 
} 

、ルートは以下のように定義する必要があります。

Route::get('users/age/', '[email protected]_name')->name('some_route_name'); 

・ホープ、このことができます!

+0

これは302または301を返しませんか? – asolberg

+0

いいえ、私はそうではないと思います。laravel docs - https://laravel.com/docs/5.3/middleware#defining-middleware –

+1

これをテストしましたが、これは実際には避けたかった302リダイレクトを返します – asolberg

関連する問題