2017-05-07 12 views
-2

私は何かを達成しようとしています。それは不可能なようです。アプリケーション内のいくつかのルートで、ユーザーの役割に基づいて異なるコントローラを使用したいと考えています。これは私が試みているアプローチですが、うまくいきません。ユーザールートは動作しますが、管理者のルートが戻り、VerifyCsrfToken.phpファイル内の非オブジェクトエラーのプロパティを取得しようとすると*laravel複数のコントローラを持つ1つのルート(ユーザの役割に基づいて)

Route::group(array('middleware' => 'isAdmin'), function() { 
    Route::get('/', 'Admin\[email protected]'); 
}); 

Route::group(array('middleware' => 'isUser'), function() { 
    Route::get('/', 'User\[email protected]'); 
}); 

私のミドルウェア私はいくつかのハンドル、この種のを見てきました

public function handle($request, Closure $next) 
{ 
    if(Auth::user()->isAdmin()) { 
     return $next($request); 
    } 
} 

public function handle($request, Closure $next) 
{ 
    if(Auth::user()->isUser()) { 
     return $next($request); 
    } 
} 

状況では、コントローラでこれを処理するだけで、ルートファイル内のuse役割をチェックすることもできますが、middlwaresを使用するとルートファイルがきれいになります。

+0

エラーメッセージは、表示されているコードとは関係ありません。 –

答えて

0

Route::get('/', function() { 
    if (auth()->check()) { 
     if (auth()->user()->isAdmin()) { 
      return redirect()->route(''); 
     } elseif (auth()->user()->isUser()) { 
      return redirect()->route(); 
     } else { 
      return view('index'); 
     } 
    } 
    return redirect()->to('login'); 
}); 
0

エラーメッセージは、おそらくあなたのショーコードとは関係ありません。

しかし、1つの経路で複数のコントローラを使用することは不可能です。私は同じ質問を一度尋ねました。

しかし、コントローラを1つだけ使用して、そのコントローラで承認を処理することができます。例えば

public function getIndex() 
{ 
    if(Auth::user()->isAdmin()) { 
     //Admin 
     return $this->getAdminIndex(); 
    } else { 
     //No admin 
     return $this->getUserIndex(); 
    } 
} 

protected function getAdminIndex() 
{ 
    return view('admin.index'); 
} 

protected function getUserIndex() 
{ 
    return view('user.index'); 
} 

しかし、それを行うためのクリーンな方法は、ちょうど2つのルートを持つことです。

関連する問題